关于移位运算符及其在C++中的优先级
Regarding the shift operator and its precedence in C++
在测试用例中对一些寄存器进行编程时,我遇到了以下语句。我是C++新手。如果这是一个愚蠢的问题,请提前道歉。
base_width = 13; // assume 32 bit number
base_width += (base_width << 6) << 5;
考虑到base_width
是一个32位的unsigned int
,执行以上操作后,base_width
的值应该是多少?我尝试了不同的编译器,结果不同。根据C++标准,答案应该是什么?为什么?
让我们简化一下:
base_width = 13; // assume 32 bit number
base_width += (base_width << 6) << 5;
base_width = 13 + ((13 << 6) << 5);
base_width = 13 + (832 << 5);
base_width = 13 + 26624;
base_width = 26637;
CCD_ 4的最终结果为26637。至少根据标准的一致性实施。
如果你在不同的编译器上得到了不同的结果,那么要么a)你的编译器是垃圾(不太可能),要么b)你的代码与你发布的代码不同(更有可能)。
想想二进制中的移位:
base_width = 13; // 1101 (base 2)
(base_width << 6) // 1101000000 (base 2)
(base_width << 6) << 5 // 110100000000000 (base 2) = 26624
结果:
base_width += (base_width << 6) << 5; // 13 + 26624 = 26637
相关文章:
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 打印优先级队列
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 排序数组优先级队列
- 更改运行时优先级队列的排序功能
- 优先级队列构造函数的工作
- 实现优先级队列
- 优先级队列功能比较
- C++ 带有函数指针的运算符优先级
- 将更高的优先级设置为 boost::asio 线程处理进程
- 在C++中打印对的优先级队列的所有值时出现问题
- <<运算符优先级与字符串比较
- SFINAE 模板专用化优先级
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- 使用堆的优先级队列,具有相同键的值不遵循 FIFO(先进先出)
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?