在测试用例中对某些寄存器进行编程时,我遇到了此语句。我是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/