C++ 显示浮点的ieee 32位表示形式。。。指针输出上的奇怪行为
以下代码有点问题:C++ 显示浮点的ieee 32位表示形式。。。指针输出上的奇怪行为,c++,C++,以下代码有点问题: void main() { float value = 100; char * vP; vP = (char *) &value; printf ("%02x ", *(vP+3)); printf ("%02x ", *(vP+2)); printf ("%02x ", *(vP+1)); printf ("%02x ", *(vP+0)); } 我得到的结果是: 42 FFFFFF C8 00 00 而不是: 42 c8 00 00(根据IEEE 32
void main()
{
float value = 100;
char * vP;
vP = (char *) &value;
printf ("%02x ", *(vP+3));
printf ("%02x ", *(vP+2));
printf ("%02x ", *(vP+1));
printf ("%02x ", *(vP+0));
}
我得到的结果是:
42 FFFFFF C8 00 00
而不是:
42 c8 00 00(根据IEEE 32位转换的要求)
有人能帮忙解释一下哪里出了问题吗?如果我使用
浮点值如12.2,一切正常
谢谢并致以最良好的问候
Olaf。这是因为您的计算机上有一个
字符签名。然后,在printf
中,由于它是一个可变函数,char
被提升为int
,保留负号。因此,0xC8变为0xFFFFC8
使用无符号字符*vP
强制表示为无符号。请参阅以进行比较。这是因为您的计算机上有一个字符签名。然后,在printf
中,由于它是一个可变函数,char
被提升为int
,保留负号。因此,0xC8变为0xFFFFC8
使用无符号字符*vP
强制表示为无符号。请参阅以进行比较