c语言中左移问题

来源:互联网 发布:淘宝主图背景图模板 编辑:程序博客网 时间:2024/06/05 21:54

下面是在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.ctest.c: In functionmain’:test.c:7: warning: left shift count >= width of type[wang@Aming Desktop]$ ./test1<<b=11<<32=0

个人分析:

首先编译部分的警告应该是这样理解的,其中一个是变量,一个是常数。编译知识检查语法及规则的方面的错误或者警告,所以,对于1<<b;这个语句是不存在语法及规则方面问题的。然而,对于1<<32,常量32大于类型的长度是可以理解的
其次,对于得出不同的结果部分,个人理解是这样的,(以1<<b为例)如果是一个变量则左移位数是b%32. 而一个确切的常数则移动相应的位数,例如1<<32,则左移32位

0 0