为什么c语言中的数值可以保留两个小数位数?
C是这样定义单精度数据的——
共有32二进制位,1位符号位+8位阶码(小数点要移动的位数)+23位尾数:
最高位是符号位,1表示负数,0表示正数。这里-2.5,所以取1。
接着是8位阶码,阶码用移码表示,最高位为符号,0表负、1表正;单精度要在原值上+127实现,即加01111111。
把尾数原码接着写在后面,无限小数写够23位即可。注意原码都要化成以1打头(就是小数点移到第一个有效1之后,恢复时小数点应该向哪个方向移几位由阶码表示),并把小数点前面的1省写即可。
对于-2.5具体是这样转换的:
求尾数:2.5的二进制原码是10.1,变成1.01并省去小数点前面的1为01,01就是尾数。
求阶码:由1.01恢复为10.1小数点要向右移一位,所以阶码符号为1(正)、移值为0000001;0000001+1111111=10000000。这就是-2.5的阶码。
求全码:1+10000000+01-->11000000 00100000 00000000 00000000——后面的0是补上的,因为小数点后的0实际无数学意义,但C中要补齐32位。最后11000000 00100000 00000000 00000000这个数就是-2.5的格式化表达。
不知你问的是不是这个意思。
2022-12-22