Switch Float Char总结……基础内容的实现幕后

关于switch语句……
我们可以把计算机执行程序的过程抽象为以下模型:
打开已编译的程序,将二进制代码序列放入内存。
顺序取出内存中的代码并执行。
switch语句和if语句在底层的执行方式不同。
switch语句并不进行条件判断,而是根据所给的值进行计算后直接跳转到相应的内存地址执行指令,所以在分支较多的情况下运行效率很可能比if高。
比如,对于switch(i)我们可以假定switch开始部分的语句在内存中的a位置,每个case开始部分可以设置成a+8i,当代码执行到switch语句时令它直接跳转到a+8i,而可以不进行更多条件判断(当然,需要判断a+8i有没有超出switch语句块)。
if语句则是老老实实地按顺序判断啦。
switch采用的结构称为跳转表,不过采用这种结构也当然同时带来了诸多限制,比如case后必须是常量/常量表达式。

关于float……
作为一种计算机用于存储小数的数据结构,float/double的构成方式和整形有着非常大的不同。
如果让我们自己设计一个用来存储小数的数据类型(假设它占用32位),我们会设计成什么样呢?
最好想的可能就是完全模拟数学中的小数。由于小数点无法和数字一同表示成二进制(即使表示也会和数字位混淆),所以只能不表示小数点了,规定前16位表示整数位,后16位表示小数位,例如100.2可以表示成0000 0000 0110 0100(100的二进制表示) 0000 0000 0000 0010。(大概还需要1位表示符号)
这固然可行,而且是精确表示,不过实际上并不是这么做的。
实际上浮点数的数据类型将存储空间分为数符(占1位,用于表示符号)、阶码和尾数。浮点数表示小数c的过程就像(1+a)*2^b = c,a<1,确定a和b。a就是尾数,而b是阶数。float中阶码占8位,尾数占23位。采用这种方式存储小数虽然会导致一定程度的不精确,但可以获得更大的表示范围。
所以,用==判断两个float类型的量会有风险,以及看起来同样一个数用float和int存储起来实际并不一样(但好消息是很多时候计算机会帮我们进行转换)。

关于char……
本质上和int、long一样,都是用于存储整数的类型,和字符什么的没有任何关系。是人们把数字和字符联系在了一起。因为要表示字符,可以让字符和数字一一对应。(比如让48对应0,49对应1……65对应A,66对应B,97对应a,98对应b……目前编译器都采用这种命名为ascii的编码方式。)
char占用8位,故能表示2^8=256个数字,对应256个字符(英文,数字,英文符号和特殊符号)。
综上,在编程语言中,'A’等价于65(char类型)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值