帮助理解整数的二进制表示?

时间:2010-12-29 00:27:01

标签: binary

我正在尝试理解这些插图,但有些部分我不明白:

  • “但计算机必须向后计算负数”

    • 为什么在二进制文件的前面添加1表示计算机必须向后计数?
  • “翻转位并添加1!”

    • 这意味着加1?

woops:http://csillustrated.berkeley.edu/PDFs/integer-representations.pdf

3 个答案:

答案 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. 为什么在前面添加1表示计算机必须向后计数?

    由于携带方式有效,FFFFFFFFF + 1 == 00 - 1 == FFFFFFFF。所有位都被翻转,包括第一位。 如果您只是将负数定义为以1位(80000000 - FFFFFFFF)开头的数字,那么您将获得一个很好的统一行为,以便添加自然溢出。

  2. 翻转位并在2的补码中加1:否定数字

    ~x+1 == -x; // always true

答案 2 :(得分:0)

您所谈论的内容称为signed integers