您的位置:首页 > 编程语言 > C语言/C++

c语言中左移问题

2015-09-19 16:48 246 查看
下面是在GCC上面的程序及结果

#include <stdio.h>

int main()
{
int  b = 32;
printf("1<<b=%d\n",1<<b);
printf("1<<32=%d\n",1<<32);
return 0;
}


结果

[wang@Aming Desktop]$ gcc -o test test.c
test.c: In function ‘main’:
test.c:7: warning: left shift count >= width of type
[wang@Aming Desktop]$ ./test
1<<b=1
1<<32=0


个人分析:

首先编译部分的警告应该是这样理解的,其中一个是变量,一个是常数。编译知识检查语法及规则的方面的错误或者警告,所以,对于
1<<b
;这个语句是不存在语法及规则方面问题的。然而,对于
1<<32
,常量32大于类型的长度是可以理解的

其次,对于得出不同的结果部分,个人理解是这样的,(以
1<<b
为例)如果是一个变量则左移位数是b%32. 而一个确切的常数则移动相应的位数,例如
1<<32
,则左移32位
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: