java - 在整数的补码表示中,(2^32 - 1) 的计算结果为何与 -1 相同?

标签 java binary twos-complement number-systems

这是我迄今为止所做的工作:

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/

相关文章:

java - 如何在 Clojure 中将大于 127 的 int 转换为 byte

java - 获取android中当前正在运行的任务的应用程序图标

java - "Essential"(Jigsawed) 没有模块化代码的 Java 9 JRE

python - 写入大型二进制文件时出现内存错误

c# - 避免由于 float 的二进制存储而导致意外行为的最佳方法是什么?

java - 如何将负整数转换为二进制补码形式? ( java )

java - 如何计算char数组中每个字符出现的次数?

java - 如何使用 Java 查找应用程序引擎数据存储中具有最大重复项的值?

assembly - 汇编 8086 中的减法设置了错误的标志

java - Java 中的 String.format() 和十六进制数字