基本数据类型的取值范围&强制转换&内存存储

c语言基本数据类型如下,以下讨论,是基于64bit平台而言:

【a】数据类型         长度                     取值范围                        内存存储
1、signed int      4字节           -2147483648 ~ 2147483647             1bit符号位 + 31bit数字位
2、unsigned int    4字节                     0 ~ 4294967295             32bit数字位
3、signed char     1字节                  -128 ~ 127                    1bit符号位 + 7bit数字位
4、unsigned char   1字节                     0 ~ 255                    0bit数字位
5、signed short    2字节                -32768 ~ 32767                  1bit符号位 + 15bit数字位
6、unsigned short  2字节                     0 ~ 65535                  16bit数字位
7、signed long     8字节  -9223372036854775808 ~ 9223372036854775807    1bit符号位 + 63bit数字位
8、unsigned long   8字节                     0 ~ 18446744073709551615   64bit数字位

【a1】:正负数:前提是:计算机中是以补码的形式存储数据的
以signed char举例:
直观的来看,从数据类型的1bit符号位 + 7bit数值位 分析如下:
原码: 0 111 1111 ~ 0 000 0000 ~ 1 000 0000 ~ 1 111 1111
数值:        127 ~ +0         ~         -0 ~ -127
补码: 0 111 1111 ~ 0 000 0000 ~ 0 000 0000 ~ 1 000 0001,从左侧补码取值范围可以看到,补码的1 000 0000没有用到,因此人为规定1 000 0000表示负数-128
编程可以看到,在内存中的数据存储,确是补码形式
【a2】:强制转换<类型长度一致时>:前提是:内存数据不变,只是将内存中的数据从typeA识别为typeB
如:int i = -1;
   unsigned int j = i;
   则,打印显示,j的值为65535
同理:unsigned int i = 1;
     int j = i;
   则,打印显示,j的值为1
【a3】:强制转换<类型长度不一致时>:
     <1> 短型负数 转 长型负数
     <2> 短型正数 转 长型正数
     <3> 短型负数 转 长型正数
     <4> 短型正数 转 长型负数
     
     <5> 长型负数 转 短型负数
     <6> 长型正数 转 短型正数
     <7> 长型负数 转 短型正数
     <8> 长型正数 转 短型负数

【b】数据类型         长度                     取值范围                        内存存储
9、float           4字节                -2^128 ~ 2^128                  1bit符号位 + 8bit指数位 + 23bit数值位
10、double         8字节               -2^1024 ~ 2^1024                 1bit符号位 + 11bit指数位 + 52bit数值位


猜你喜欢

转载自www.cnblogs.com/tedani/p/10051158.html