小编Ily*_*hin的帖子

当sizeof(int)== 4时,1 << 31在C中定义得很好

根据这个问题的答案:

E1 << E2的结果是E1左移E2位位置; 腾出的位用零填充.如果E1具有无符号类型,则结果的值为E1×2 E2,比结果类型中可表示的最大值减少一个模数.如果E1具有带符号类型和非负值,并且E1×2 E2可在结果类型中表示,那么这就是结果值; 否则,行为未定.

这似乎意味着1 << 31未定义.

但是,如果我使用,GCC不会发出警告1 << 31.它确实发出一个问题1 << 32. 链接

那是哪个呢?我误解了标准吗?海湾合作委员会有自己的解释吗?

c bit-shift undefined-behavior language-lawyer

25
推荐指数
3
解决办法
1924
查看次数

为什么在 System V AMD64 ABI 中不使用 RAX 来传递参数?

我不明白不在 RAX 中传递参数有什么好处,因为返回值在 RAX 中,无论如何它都会被被调用者破坏。

有人可以解释一下吗?

x86-64 calling-convention

6
推荐指数
1
解决办法
773
查看次数