C语言学习2
float内存表示
float
共计32位,折合4字节
由最高到最低位分别是第31、30、29、……、0位
31位是符号位,1表示该数为负,0反之。
30-23位,一共8位是指数位 即移码。管理小数点移动的位数
22-0位,一共23位是尾数位 即尾码。
注意:要保证小数点的左边只有一个1 所以会左/右移动
怎么确定float转成二进制的?
如下的例子:
对于float a = 12.25 在表示为二进制时,
上述会移动3位
左移: 127+左移的位数
右移: 127-右移的位数
因为8bit有0~255 所以中间位127 用这个来定位,IEEE规定,在float类型中,用来计算指数的偏移量为127。
如果指数实际是0,那么在内存中存的就是0+127=127的二进制
要左移三位 则127+3=130 存的就是130的二进制表示 表示为16进制即0X41440000
过程:
0 0111 1111
浮点数尾数共23位,右侧以0补全:0 0111 1111 0000 …0000
左移三位 127+3:0 1000 0010 1000 1000…00
转换为16进制为0x41440000
以下程序: