我对比特操纵相当新,我想弄清楚(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的最大值.
我真的很困惑哪一个是对的.