在 C 中我有这个代码块:
if(x==1){
a[j][i]=1;
}
else{
a[j][i]=0;
}
a
是一个浮点值矩阵,如果我尝试以 nasm 语法查看此代码的编译程序集
线a[j][i]=0;
作业,以这种方式编码
dword [rsi+rdi], 0
但这条线a[j][i]=1;
作业,以这种方式编码
dword [rsi+rdi], 1065353216
How can 1065353216代表一个1.0f??
Because 1065353216是 32 位浮点值 1.0 的无符号 32 位整数表示。
更具体地说,1.0 作为 32 位浮点数变为:
0....... ........ ........ ........ sign bit (zero is positive)
.0111111 1....... ........ ........ exponent (127, which means zero)
........ .0000000 00000000 00000000 mantissa (zero, no correction needed)
___________________________________
00111111 10000000 00000000 00000000 result
所以最终的结果是2^0 + 0,也就是1 + 0,也就是1。
您可以使用二进制转换网站 http://www.binaryconvert.com/ or 这个有用的转换器 http://www.h-schmidt.net/FloatConverter/IEEE754.html查看其他值。
至于为什么 127 突然意味着指数为零:这实际上是一个非常聪明的技巧,称为指数偏差 http://en.wikipedia.org/wiki/Exponent_bias这使得比较浮点值变得更容易。尝试使用截然不同的值(10、100、1000...)的转换器,您会看到指数也会增加。排序也是符号位是第一位存储的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)