它如何使输出“fffffffe”?

时间:2016-06-02 18:20:26

标签: c

该程序如何产生以下输出? 程序

#include<stdio.h>
int main()
{
printf("%x", -1<<1);
getchar();
return 0;
}

输出

fffffffe

1 个答案:

答案 0 :(得分:3)

负有符号整数值的左移在C中未定义。

  

6.5.7按位移位运算符

     
      
  1. E1的结果&lt;&lt; E2是E1左移E2位位置;腾出的位充满了   零。如果E1具有无符号类型,则结果的值为E1×2 E2,减少模数   比结果类型中可表示的最大值多一个。如果E1有签名   类型和非负值,E1×2 E2可以在结果类型中表示,然后就是   结果价值; 否则,行为未定义。
  2.   

在您的情况下,-1的类型为signed int。 您看到的结果没有意义,是架构的工件。