1、整数型存储
整数型存储就是所有整型家族里的数据类型的存储方式,也就是说包含了字符类型的存储(因为字符的''
操作符的返回值是ASCII码值,故实际上存储的是整数)。
1.1、有符号整数
有符号整数包含char
,short
,int
,long
,long long
这几种类型的数据。
他们的二进制表示方法有三种:原码,反码,补码。
这三种表示方法均有符号位和数值位两部分,符号位都是用0
表示正,用1
表示负,最高位的一位是被当做符号位,剩余的都是数值位。
原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。
正整数的原、反、补码都相同;负整数的三种表示方法各不相同。
有符号整数在内存中统一以补码的形式存储,并且以补码形式参与任何操作。
以补码形式进行存储的原因:
在计算机系统中,有符号数值一律用补码来表示和存储。
原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
1.2、有符号整数的特性
由于补码与数据类型限制精度的特性,产生了一种有意思的循环:
以char
类型为例子:
-128,-127…-2,-1,0,1,2…126,127,-128,-127…-2,-1,0,1,2…126,127,-128,-127…
总结为:阳极生阴,阴极生阳(有点模运算的感觉在里面)。
1.3、无符号整数
无符号整数包含unsigned char
,unsigned short
,unsigned int
,unsigned long
,unsigned long long
这几种类型的数据。
无符号数中没有原码-反码-补码
的概念。
无符号整数的二进制表示形式只有一种,即直接将无符号整数翻译成对应的二进制形式,并且以这种形式在内存中存储。
1.4、无符号整数的特性
由于数据类型限制精度的特性,也产生了一种有意思的循环:
以char
类型为例子:
0,1,2…126,127,128…254,255,0,1,2…126,127,128…254,255,0,1,2…126,127,128
2、浮点数型存储
使用浮点数型存储的数据类型有:float
、double
、long double
。
浮点型数存储也就是IEEE 754
标准。
根据IEEE 754
标准,任何一个二进制浮点数V
可以表示成下面的形式:
V = ( − 1 ) S ∗ M ∗ 2 E V=(-1)^S*M*2^E V=(−1)S∗M∗2E
其中:
( − 1 ) S (-1)^S (−1)S:表示符号位,当S=0,V为正数;当S=1,V为负数。
M M M:表示有效数字,M取值范围是大于等于1,小于2。
2 E 2^E