小编HM9*_*527的帖子

1左移31(1 << 31)如何工作以获得最大int值?以下是我在网上发现的想法和一些解释

我对比特操纵相当新,我想弄清楚(1 << 31) - 1是如何工作的.

首先我知道1 << 31是

1000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

而且我知道它实际上是最小int值的补充,但当我试图找出(1 << 31) - 1时,我发现一个解释说明,它只是

10000000000000000000000000000000 - 1 = 01111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)

我几乎想要相信它,因为它真的很简单.但这真的发生了什么?如果不是,为什么它恰好是正确的?

我原来的想法是,真正的过程应该是:-1的两个补码是

11111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)

然后(1 << 31) - 1 =

(1)01111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)

最左边的1被放弃,然后我们有int的最大值.

我真的很困惑哪一个是对的.

bit-manipulation max bit twos-complement

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

标签 统计

bit ×1

bit-manipulation ×1

max ×1

twos-complement ×1