32位系统中char,int型数据在内存中的存储方式
- 计算机中存储整型类数据采用的是补码。
- 正数的补码与原码相同,负数的补码=反码+1 。
- 反码:符号位不动,数值位按位取反。
- 符号位:1表示负数,0表示正数
-
char也是一种整型类型,占1byte(8bit)它存储的是字符的ascii值,有符号字符类型[signed] char的数据表示范围为 -128(1000 0000) ~ 127,无符号字符类型unsigned char 的数据表示范围为 0 ~ 255。
char -
int 型占4byte(32bit),有符号[signed] int 数据范围为 -32768 ~32767,无符号unsigned int 数据范围为 0 ~ 65535
int
浮点数在内存中的存储方式
- float型实数在内存中占4个字节(32 bit),从低位到高位依次叫第0位到第31位。这32位可以分为3个部分:符号位(第31位),阶码(第30位到第23位共8位),尾数(最低23位)。
1、符号位:0表示正数,1表示负数。
2、阶码:表示该实数转化为规格化的二进制实数后的指数与127(127即所谓偏移量)之和, 规格化的二进制实数的指数只能在-127~ +127之间,所以,一个float型数的最大值在+2127即+3.4*1038,最小值在-2127即-3.4*1038。
3、尾数:表示该实数转化为规格化的二进制实数后小数点以后的其余各位。
float -
double型与float型存储方式相同,只是所占的位数不同
double
例如,将十进制178.125表示成机器内的32个字节的二进制形式.
- 将128.125表示成二进制数:(178.125)(十进制数)=(10110010.001)(二进制形式);
- 将二进制形式的浮点实数转化为规格化的形式:(小数点向左移动7个二进制位可以得到) 10110010.001=1.0110010001*2^7
- 符号位:该数为正数,故第31位为0,占一个二进制位.
阶码:指数为7,故其阶码为127+7=134=(10000110)(二进制),占从第30到第23共8个二进制位.
尾数: 为小数点后的部分, 即0110010001.因为尾数共23个二进制位,在后面补13个0,即01100100010000000000000- 178.125在内存中的实际表示方式为:
0 10000110 01100100010000000000000
将-0.15625表示成机器内的32个字节的形式.
- 将-0.15625表示成二进制形式: (-0.15625)(十进制数)=(-0.00101)(二进制形式);
- 将二进制形式的浮点数转化为规格化的形式:(小数点向右移动3个二进制位可以得到) -0.00101=-1.01*2^(-3)
- 符号位:该数为负数,故第31位为1,占一个二进制位;
阶码:指数为-3,故其阶码为127+(-3)=124=01111100,占从第30到第23共8个二进制位;
尾数: 小数点后的01,当然后面要补21个0;- 0.15625在内存中的实际表示形式为:
1 01111100 01000000000000000000000
网友评论