程序员笔试、面试笔记:数据类型在计算机中的存储
int型:补码储存方式(4字节,32位)
- 正数:原码与补码相同。
例如 2的储存
二进制:010
前面补0: 00000000 00000000 00000000 00000010
- 负数:补码为原码按位取反+1
例如 -2的储存
原码:00000000 00000000 00000000 00000010
按位取反:11111111 11111111 11111111 11111101
+1 :11111111 11111111 11111111 11111110
float型:IEEE R32.24规范,即1位符号位、8位阶码、23位尾数(4字节 32位)
例如 20.125的储存
整数部分转化为二进制:除2取余 10100
小数部分转化为二进制:乘二取整 001
二进制:10100.001
二进制科学计数法:1.0100001 * 2^4 (要使整数位为1,小数点左移4位)则阶数为4
阶码表示:阶数+偏置(float型是127) 4+127 = 131 即1000 0011
1位符号位(正数为0,负数为1) 8位阶码位 23位尾数(后面补0)
0 10000011 0100 001 0000 0000 0000 0000
double型:遵循IEEE R64.53规范,即符号位是1位,阶码为11位,尾数为52位
偏置量为1023,其他计算同float型。
例题:float a = 1.0f;
cout << (int&)a <<endl;
输出的结果是什么?
1.0f在内存中储存遵守浮点型储存方式,应储存为:
1.0f的科学计数法:1.0*2^0
1位符号位(正数为0,负数为1) 8位阶码位 23位尾数(后面补0)
0 11111111 00000000 00000000 0000000
输出会以int型输出(默认十进制输出):1065353216