易截截图软件、单文件、免安装、纯绿色、仅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


相关问答:

向高手请教fortran 调用C 的问题

我现在要些一个fortran调用C接口的问题,但是不知道 C语言里面分配的指针怎么付给fortran,又不能在fortran立马先分配好,业务上不允许。
我写了个测试的例子。但是不行。
test.c
#include <stdio.h>
#incl ......

C/C++里屏shift+f10键要怎么写! - C/C++ / C++ 语言

SHIFT加F10与那个键右ctrl边上的那个键功能一样,想屏这个
但不知要怎么写那个组合键!
有没哪个大侠放一段这个的代码或写一段
http://topic.csdn.net/u/20090609/15/7dc9fb70-243f-4070-9cfd-34e48b66e6c6.html ......

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也不可 ......

如何用C画图,能否编一个具体的 急用

如何用C画图,能否编一个具体的 。
#include <conio.h>
#include <stdio.h>
int main()
{
int i;
char *s[]={"BLACK","BLUE","GREEN","CYAN","RE ......

C/S项目架构设计----求助 - Java / Java SE

本人正在用Java做一个C/S架构的项目, 
可是由于项目比较大,前期对架构的设计尤其重要,因为后期可能随时会加个功能或者去掉某些功能。 
所以特地寻求如何设计C/S的架构使程序更加面向对象更加易于维 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号