#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
移位运算的右操作数不要超过或等于左操作数经过类型提升后的长度,否则其行为是未定义的:
飞流的正确答案
相关问答:
请问用C或C++如何编写求解3D魔方的程序,该从何开始?
谢谢各位,帮忙提点建议吧。
http://www.mofang.net/code/176/182/6581.html
我只能突破60秒!唉。
我刚过40秒
google的android中有个OpenGL ES + ......
问题一:
在对齐为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 ......
#include "stdio.h"
int main()
{
char *ch(char *, char *);
char str1[]="I am glad to meet you!";
char str2[]="Welcom to study C!";
&nb ......
两个文件1.PC,1.inc
1.PC有操作oracle数据库的 ,1.inc也有操作oracle数据库
在其他数据中如informix 中$include 1.inc就可以使用了
在ORACLE数据库重 $include 1.inc不可用 EXEC SQL include 1.inc也不可 ......