浮点型:
浮点型长度为32位(0-31);
存储结构为 31(符号位) 30-23(小数点偏移位)22-0(有效位)
例1: 10.3125 = 1010.0101 = 1.0100101 * 2^3
1010.0101中整数位为1010,由十进制10转换为二进制得到
小数位为0101,由下式得到。
所以内存中为 0(符号位正)100 0010 1(127 + 3)010 0101 00...
其中小数点偏移127 + 3 是因为小数点偏移可能向前也可能向后,根据标准127作为基准值。010 0101 00...由1.0100101得到,整数位固定为1,所以去掉整数位(精度可以由此提高一位)
0100 0010 1010 0101 0000 0000 0000 0000求实际值
最高位为0表示 实际值为 +
10000101 表示 存储时小数点向前偏移了3位
010 0101 0000 0000 0000 0000 (>>3) 010. 0101 0000 0000 0000 0000
补上之前省略的整数位1得到1010. 0101 0000 0000 0000 0000
1010 计算整数位 10
0101 0000 0000 0000 0000 计算有效位 1/2^2 + 1/2^4 = 0.3125
得到实际值:10.3125
注意有些值单精度浮点型并不能精确存储比如:125.24
整型:
void t1()
{
int a = 0x12345678;//正数直接存储
short b = a;
std::cout << b << std::endl; //22136 0x5678
unsigned short c = -100;
std::cout << c << std::endl; //65436
std::cout << (short)(c << 2) << std::endl; //-400
//负数以补码(反码(除符号位全部取反)+1)存于内存,读取时先-1,然后除符号位全部取反
std::cout << (short)(c >> 2) << std::endl; //16359
}