在测试用例中对某些寄存器进行编程时,我遇到了此语句。我是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; // 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++中的移位运算符及其优先级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18526022/

10-11 18:00