在Visual Studio编译以下C代码时,结果为4.
void main() { int c = 1; c = c<<34;}
Run Code Online (Sandbox Code Playgroud)
从Visual Studio反汇编窗口看到的汇编代码是
shl eax,22h
Run Code Online (Sandbox Code Playgroud)
从汇编开始,我们很容易看到我们正在转移34.由于这里的整数是4个字节,从结果来看很明显,模数运算是在机器级别上进行的,以使其工作为2.
我想知道这种行为是否跨平台标准化或跨平台不同?
发生未定义的行为.这是由语言标准标准化的(参见6.5.7 Bitwise shift operators1999年的C标准部分).然而,UB的可观察效果不是标准化的,并且可能有所不同.
至于shl eax, 22h,CPU的移位计数将被截断为5位(参见文档),该指令的确如此shl eax, 2.