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位
相关文章推荐
- 默认参数使用技巧
- C++内存分配和拷贝构造函数写研究
- C语言关键字学习总结
- C++创建文件夹
- 用c语言输出九九乘法口诀
- 函数的可重入性理解
- 指针前钱解析
- C++多文件结构及预处理命令
- 内存泄漏以及常见的解决方法
- 再论C++之垃圾回收(GC)
- 分治法解决最大子数组问题 (C/C++)
- c++函数模板(function template)
- C语言程序设计(第二版)第11章例题
- VC++动态库DLL制作和调用
- 【C++】深拷贝
- c++函数重载笔记
- c++有默认参数的函数——笔记
- c++如何将vector<char>转化成string
- c++ for_each 实现原理英文原版转载( Conditional Love: FOREACH Redux)
- 归并排序的原理,c++代码实现