移位操作的优先级
2015-03-05 10:29
85 查看
看一下下面的代码片段
#include <stdio.h>
#include <stdlib.h>
int main() {
int i = 2;
int x = i << 2 + 1;
printf("%d\n", x);
int y = (i << 2) + 1;
printf("%d\n", y);
return 0;
}
输出结果应该为16,9
因为加法的优先级高于左移,所以i<<2+1其实是i<<3。所以为16
运算操作该用括号用括号,不要带来不必要的麻烦,这种错误比较难以调试
#include <stdio.h>
#include <stdlib.h>
int main() {
int i = 2;
int x = i << 2 + 1;
printf("%d\n", x);
int y = (i << 2) + 1;
printf("%d\n", y);
return 0;
}
输出结果应该为16,9
因为加法的优先级高于左移,所以i<<2+1其实是i<<3。所以为16
运算操作该用括号用括号,不要带来不必要的麻烦,这种错误比较难以调试
相关文章推荐
- 程序员面试宝典纠错,取反操作的优先级高于移位,而非移位的优先级高于取反,整型提升蒙蔽了真相
- C/C++中的一个巨大的坑:移位操作的优先级问题
- 一劳永逸---循环移位操作
- Java中的移位操作
- C 学习笔记: 移位操作练习。
- 补码、原码、反码-移位操作 编解码
- java移位操作
- Thinking in java Shift operators 移位操作 还有基本运算符。
- Java中的移位操作以及基本数据类型转换成字节数组【收集】
- 一个C/C++中的移位操作问题
- Java的移位操作
- Java中的移位操作
- 移位操作的奇怪问题
- 【C】移位操作 处理乘法
- Delphi Shl与Shr 移位操作介绍
- 左右移位操作的规则
- Java的移位操作(收集+纠正)
- 关于java中char,byte,short的移位操作
- C/C++ 中的移位操作拾遗
- 关于java中char,byte,short的移位操作