易截截图软件、单文件、免安装、纯绿色、仅160KB

C代码中的位移问题,很奇怪

#include <stdio.h>
int main()
{
    unsigned int value1, value2;
    unsigned int num ;
   
  /*使用变量表示位移量*/
    num = 32;
    value1 = 0xffffffff < < num;
    printf("value1 = %x\n", value1);
   
  /*使用常数表示位移量*/
    value2 = 0xffffffff < < 32;
    printf("value2 = %x\n", value2);

    return 0; 
}

但是输出结果确却是:
value1 = ffffffff
value2 = 0

    我是在linux下使用gcc 4.4.1编译运行这段代码,int是32位。我预想的是value1和value2结果都应该时0才对,为什么value1是ffffffff而value2是0?

    另外补充一下:上面的结果是在代码在编译时不开优化选项得到的,但是在编译时开启-O1,-O2或者-O3情况下,输出结果是:
value1 = 0
value2 = 0
   



LCC输出是

value1 =ffffffff


value2 =ffffffff


移位运算的右操作数不要超过或等于左操作数经过类型提升后的长度,否则其行为是未定义的:

飞流的正确答案

引用
移位运算的右操作数不要超过或等于左操作数经过类型提升后的长度,否则其行为是未定义的:


标准的内容:

6.5.7 Bitwise shift operators


相关问答:

用C或C++如何编写求解3D魔方程序 - C/C++ / C++ 语言

请问用C或C++如何编写求解3D魔方的程序,该从何开始?
谢谢各位,帮忙提点建议吧。

http://www.mofang.net/code/176/182/6581.html

我只能突破60秒!唉。

我刚过40秒

google的android中有个OpenGL ES + ......

C 程序问题 (三) - C/C++ / C语言

问题一:
在对齐为4的情况下
struct BBB
{
long num;
char *name;
short int data;
char ha;
short ba[5];
}*p;
p=0x1000000;
p+0x200=____;
(Ulong)p+0x200=____;
(char*)p+0x200=____;
假设在32位C ......

C 程序问题(四) - C/C++ / C语言

#include "stdio.h"
int main()
{
  char *ch(char *, char *);
  char str1[]="I am glad to meet you!";
  char str2[]="Welcom to study C!";
&nb ......

linux下C语言开发oracle的问题。

两个文件1.PC,1.inc
1.PC有操作oracle数据库的 ,1.inc也有操作oracle数据库 
在其他数据中如informix 中$include 1.inc就可以使用了
在ORACLE数据库重 $include 1.inc不可用 EXEC SQL include 1.inc也不可 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号