C语言再学习——数据类型
C语言数据类型
原码:最高位表示符号位:0表示+,1表示-;
[+1]原 = 0000 0001
[-1]原 = 1000 0001
反码:
反码转反码:对反码再一次求反码
正数的反码是其本身;
负数的反码是其原码的基础上,符号位不变,其他位各个取反。
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
补码:
补码转原码: 对补码再一次求补码
正数的补码是其本身;
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
在计算机内部不使用原码(原因:由于在做减法计算时会出现错误),反码(原因:对于0这个数值比较特殊,+0和-0的反码表示不同)表示数值。计算机采用的是补码进行采用存储数据。
详见:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
数据类型决定了占用内存空间大小。
高占位浮可以打印低占位浮,使数据的大小不会缺失,但是低占位打印高占位可能导致数据的缺失。例如:int类型可以打印short类型和char类型。
float类型:
无论是单精度还是双精度在存储中都分为三个部分:
- 符号位(Sign) : 0代表正,1代表为负
- 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
- 尾数部分(Mantissa):尾数部分
其中float的存储方式如下图所示:
而双精度的存储方式为:
float和double类型是有精度问题的:float到小数点第6位,double类型的精度是到小数点后面第15位。
如非声明,则为原创 糊涂猫until