返回信息流从视频里看到 ~2=-3 ( 十进制 ) 原因是 计算机里运算用的都是补码。
我是这么想的 2的补码是他自己,也就是0……010, 对补码求反得1111……101,然后再换成十进制就得到最后结果了。
可是视频里算到1111……101这里时候说,到这里没有结束,应该继续将其减一再取反 也就得到100000……011 所以是-3 我不明白为毛 “到这里没有结束" 谢谢啊!
这是一条镜像帖。来源:北邮人论坛 / java / #35617同步于 2014/10/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
一个取反的问题
nonono8200
2014/10/27镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
【 在 nonono8200 的大作中提到: 】
: 从视频里看到 ~2=-3 ( 十进制 ) 原因是 计算机里运算用的都是补码。
: 我是这么想的 2的补码是他自己,也就是0……010, 对补码求反得1111……101,然后再换成十进制就得到最后结果了。
: 可是视频里算到1111……101这里时候说,到这里没有结束,应该继续将其减一再取反 也就得到100000……011 所以是-3 我不明白为毛 “到这里没有结束" 谢谢啊!
有两个概念吧,一个是“2's complement notation”,可以翻译为“补码表示法”。这是一种方案,不是一个运算。用这种方法,正数表示为本身,负数表示为绝对值按位取反然后加一。另一个概念就是“按位取反然后加一”这个运算,就是(~a+1),或者如果你的机器使用补码表示法的话,就是(-a)。
我一般避免说“7的补码是...000000111;-7的补码是...11111001”这样的话,一般说“7使用补码表示法表示为...0000000000111;-7表示为...111111111001”。
1.正数补码形式是它本身,负数补码形式是取反之后加一。(为了排除补码正0负0两种形式)
2.计算机中符号数都是补码表示的。
3.想知道正数取反(即~2)之后对应的究竟哪个负数的补码形式,可以执行求负数补码的那个操作的逆操作,即减一之后再取反,就可以知道1开头的那个~2对应的是哪个负数。