0

在测试用例中编写一些寄存器时,我遇到了这个语句。我是 C++ 新手。如果这是一个愚蠢的问题,请提前道歉。

base_width = 13; // assume 32 bit number
base_width +=  (base_width << 6) << 5;

考虑base_width是 32-bit ,上面执行后unsigned int的值应该是多少?base_width我尝试了不同的编译器,它给出了不同的结果。根据 C++ 标准,答案应该是什么,为什么?

4

2 回答 2

2

让我们简化一下:

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;

最终结果为base_width26637。至少根据标准的符合性实现。

如果您在不同的编译器上得到不同的结果,那么要么a)您的编译器是垃圾(不太可能),要么b)您的代码与您发布的不同(更有可能)。

于 2013-08-30T06:16:02.857 回答
0

想想二进制的变化:

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
于 2013-08-30T06:20:39.160 回答