这是我迄今为止所做的工作:
2^32 = 10...0
减去 1 -> 01...1 这给了你 32 个 1
1 = 01
翻转位 -> 11....10 添加 1-> 1...1 这给了你 32 个 1
我错过了什么吗?我这么问是因为我尝试过练习problem您必须翻转数字的所有二进制位。与 -1 进行异或运算不起作用,但与 2^32 - 1 进行异或运算却可以。
最佳答案
要创建 2 的补码形式的任意数字,请翻转位并加 1。
因此对于 -1 如下
1 = 00000000000000000000000000000001
flip those bits
11111111111111111111111111111110
add 1 to it and you get
11111111111111111111111111111111
现在为什么是-1?
那么 -1 + 1 = 0。
如果将以下内容添加在一起,您将得到
11111111111111111111111111111111
+00000000000000000000000000000001
你继续向左边的下一个位置进位,最终溢出该字段,你剩下 0。
00000000000000000000000000000000
关于java - 在整数的补码表示中,(2^32 - 1) 的计算结果为何与 -1 相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59418913/