该程序如何产生以下输出? 程序
#include<stdio.h>
int main()
{
printf("%x", -1<<1);
getchar();
return 0;
}
输出
fffffffe
答案 0 :(得分:3)
负有符号整数值的左移在C中未定义。
6.5.7按位移位运算符
- E1的结果&lt;&lt; E2是E1左移E2位位置;腾出的位充满了 零。如果E1具有无符号类型,则结果的值为E1×2 E2,减少模数 比结果类型中可表示的最大值多一个。如果E1有签名 类型和非负值,E1×2 E2可以在结果类型中表示,然后就是 结果价值; 否则,行为未定义。
醇>
在您的情况下,-1
的类型为signed int
。
您看到的结果没有意义,是架构的工件。