This question already has answers here:
Unexpected C/C++ bitwise shift operators outcome
(6个答案)
已关闭8年。
在Visual Studio上编译以下C代码时,结果为4。
从Visual Studio反汇编窗口中看到的汇编代码是
从汇编中可以很容易地看出我们正在移位34。由于这里的整数是4个字节,因此从结果来看,很明显,在机器级别执行了模运算,以使该工作移位2。
我想知道这种行为是跨平台标准化的还是跨平台变化的?
(6个答案)
已关闭8年。
在Visual Studio上编译以下C代码时,结果为4。
void main() { int c = 1; c = c<<34;}
从Visual Studio反汇编窗口中看到的汇编代码是
shl eax,22h
从汇编中可以很容易地看出我们正在移位34。由于这里的整数是4个字节,因此从结果来看,很明显,在机器级别执行了模运算,以使该工作移位2。
我想知道这种行为是跨平台标准化的还是跨平台变化的?
最佳答案
发生未定义的行为。这是由语言标准标准化的(请参阅1999年的C标准的6.5.7 Bitwise shift operators
部分)。 UB的可观察效果尚未标准化,并且可能会有所不同。
至于shl eax, 22h
,移位计数将被CPU截断为5位(请参见文档),并且该指令实际上将表现为shl eax, 2
。
关于c - 如果我们将整数按位大小移位,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16122512/
10-12 03:21