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
今日推荐
周排行