2

对于以下代码:

void main()
{
   int i;
   float a=5.2;
   char *ptr;
   ptr=(char *)&a;
   for(i=0;i<=3;i++)
      printf("%d ",*ptr++);
}

我得到 o/p 为 102 102 -90 64 ..为什么?字符指针如何处理每个字节的 MSB 位?

4

4 回答 4

2

char 是有符号还是无符号是实现定义的。显然,系统中的 char 数据类型已签名。所以 MSB 是符号位。

于 2012-09-28T21:13:42.177 回答
1

如果将5.2浮点值转换为二进制格式,则会得到:

5.2 = 01000000 (=64) 10100110 (=166) 01100110 (=102) 01100110 (= 102)

如果您取第 3 个字节 ( 166) 并将其转换为一个signed char值(在 内[-128, 127]),那么您将获得-90.

编译您的程序-funsigned-char以获取102 102 166 64输出。

于 2012-09-28T21:50:09.163 回答
1

在您的情况下,显然它将最高有效位视为符号位,换句话说,在您的实现char中是有符号整数类型,顺便说一句,带有二进制补码表示。

于 2012-09-28T21:13:34.340 回答
0

在您的情况下,char使用有符号位表示。就值而言,它们取决于您正在处理的系统的字节顺序。

于 2012-09-29T09:38:43.267 回答