我正在尝试理解这些插图,但有些部分我不明白:
“但计算机必须向后计算负数”
“翻转位并添加1!”
woops:http://csillustrated.berkeley.edu/PDFs/integer-representations.pdf
答案 0 :(得分:2)
这可能是最简单的示例。以下是以二进制表示的从-4到4的数字:
4 0000 0100
3 0000 0011
2 0000 0010
1 0000 0001
0 0000 0000
-1 1111 1111
-2 1111 1110
-3 1111 1101
-4 1111 1100
所以说我们想要从1到-1。我们首先翻转1
的所有位1 0000 0001
flip bits
-----------
1111 1110
然后我们添加1:
1111 1110
+ 1
-----------
1111 1111
我们现在有-1。
答案 1 :(得分:1)
我没有看到插图,但你可能正在谈论Two的补码表示。 (http://en.wikipedia.org/wiki/Two's_complement)
为什么在前面添加1表示计算机必须向后计数?
由于携带方式有效,FFFFFFFFF + 1 == 0
和0 - 1 == FFFFFFFF
。所有位都被翻转,包括第一位。
如果您只是将负数定义为以1位(80000000 - FFFFFFFF)开头的数字,那么您将获得一个很好的统一行为,以便添加自然溢出。
翻转位并在2的补码中加1:否定数字
~x+1 == -x; // always true
答案 2 :(得分:0)
您所谈论的内容称为signed integers。