我已经尝试了下面的程序,并得到了72的输出。我无法理解它是如何输出为72的。
#include <stdio.h>
int main()
{
int a=0x27ea4d72;
char x=a;
printf("%x",x);
return 0;
}发布于 2011-08-07 01:10:23
来自C标准:
6.3.1.3有符号和无符号整数
unchanged.
转换属于案例#3,因为值是有符号的。所以结果是由实现定义的。
但是,对于代码:
#include <stdio.h>
int main()
{
unsigned long a = 0x27ea4d72UL;
unsigned char x = a;
printf("%x",x);
return 0;
}转换落入情况#2,在这种情况下,标准基本上说明结果将是0x27ea4d72% (UCHAR_MAX+1)。其中UCHAR_MAX是255 (最常见的情况),您将得到0x72。
发布于 2011-08-06 23:34:49
由于int通常比char宽,因此char x=a;会截断所分配的int的值。
来自"The New C Standard" book
在转换为更窄的整数类型的情况下,生成的机器码可能取决于对强制转换结果执行的操作。在赋值的情况下,通常存储未转换操作数的适当的最低符号位。对于其他运算符的实现,通常将无符号的符号位清零(执行逐位与运算通常比余数运算更快),对于有符号类型,
扩展结果fi
https://stackoverflow.com/questions/6967561
复制相似问题