转换正数,例如+7 到 8 位二进制补码,使用 4 步法显示前导 1
Convert positive number e.g. +7 to twos complement in 8 bits showing a leading 1 using 4 step method
出于教学目的,我希望在方法的上下文中理解以下内容(四个步骤,见下文):我正在尝试将 +7 转换为 8 位的二进制补码。根据 https://www.allmath.com/twos-complement.php 上显示的答案如下:
十进制 7
二进制 0000 0111
补 1111 1001
这显示负数,因为它以 1 开头。
答案不应该是0111吗
我希望能够使用这四个步骤得出答案。
第 1 步:将量级 (7) 转换为二进制。 0111
第 2 步:将 0 填充到所需的位大小。 0000 0111
第 3 步:反转位以实现 1 的补码。 1 1 1 1 1 0 0 0
STEP 4: 加1实现2的补码。
加 1
------------------>
1 1 1 1 1 0 0 1
我的理解哪里错了。在处理二进制补码时,我们被告知如果它以 1 开头则为负数。那么将正十进制数转换为二进制补码的方法是什么,或者我们是否假设对于任何正十进制数,二进制补码就是它本身:
例如 7 = 0111 或 0000 0111 如果是 8 位?
这也意味着上面的 4 步方法不能用于正数?
讨论
(注意这里的讨论使用 TCR 表示“补码表示”)
不幸的是,您在此处提供的 material (allmath.com) 可能误解了什么是“补码”。很多书籍都对它给出了规范的定义,为方便起见,引用自Wikipedia:
即可
第一句:
Two's complement is a mathematical operation on binary numbers
,及其 mathematical operation 的定义:
w = -a_{n-1}2^{n-1} + a_{n-2}2^{n-2} + ... + a_{0}2^{0}
以二进制数11111001
为例。如果没有 TCR,我们可以将其解释为 2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 1 = 249
。使用 TCR(即应用数学运算),我们将其视为 -2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 1 = -7
.
同样,对于另一个二进制数,说00000111
。如果没有 TCR,我们将其视为 2^2 + 2^1 + 1 = 7
。对于 TCR,我们将其视为 2^2 + 2^1 + 1 = 7
,与前者相同。
回到你的场景
您的 4 步操作本质上是:获取给定数字取反的 TCR。
还是以11111001
为例,经过你4步操作后,变成00000111
,也就是7
,即-7 (11111001)
的否定.同样,经过你的4步操作,00000111
变成11111001
,也就是-7
,即7 (00000111)
的否定。因此,您的 4 步操作的结果是调用 Two's Complement Negation,而不是 Two's Complement.
为什么容易混淆?
一个原因可能是:几乎所有计算机都采用了 TCR 概念。假设一台8位的计算机,当我们想看我们的计算机如何显示十进制数7
时,我们的计算机会直接打印出7
,这对大多数人来说是非常直观的。但是,对于十进制数249
,它通常不会“服从你的命令”,而是打印出另一个值:-7
.
反之,如果你想让你的电脑显示-7
,根据Cornell University's Lecture Notes,你需要做的事情是:
- 从
-7
的绝对值开始,即7
;
- 将
7
的二进制表示(即00000111
)作为输入。
- 反转位。
- 加一个。 (请注意,1~4 与您的 4 步操作完全等价)
- 将结果输入您的计算机。
然后我们的计算机将得到一个二进制表示 11111001
(它是十进制的 249
),并且它会在您的屏幕上显示为 -7
。
在这种情况下,您可以公平地说,在使用 TCR 的 8 位计算机中,-7
是二进制补码的 替代 表示 249
。这句话虽然不太规范,但对刚接触TCR概念的人有所帮助。
出于教学目的,我希望在方法的上下文中理解以下内容(四个步骤,见下文):我正在尝试将 +7 转换为 8 位的二进制补码。根据 https://www.allmath.com/twos-complement.php 上显示的答案如下:
十进制 7 二进制 0000 0111 补 1111 1001
这显示负数,因为它以 1 开头。
答案不应该是0111吗
我希望能够使用这四个步骤得出答案。
第 1 步:将量级 (7) 转换为二进制。 0111 第 2 步:将 0 填充到所需的位大小。 0000 0111 第 3 步:反转位以实现 1 的补码。 1 1 1 1 1 0 0 0 STEP 4: 加1实现2的补码。
加 1 ------------------> 1 1 1 1 1 0 0 1
我的理解哪里错了。在处理二进制补码时,我们被告知如果它以 1 开头则为负数。那么将正十进制数转换为二进制补码的方法是什么,或者我们是否假设对于任何正十进制数,二进制补码就是它本身:
例如 7 = 0111 或 0000 0111 如果是 8 位?
这也意味着上面的 4 步方法不能用于正数?
讨论
(注意这里的讨论使用 TCR 表示“补码表示”)
不幸的是,您在此处提供的 material (allmath.com) 可能误解了什么是“补码”。很多书籍都对它给出了规范的定义,为方便起见,引用自Wikipedia:
即可第一句:
Two's complement is a mathematical operation on binary numbers
,及其 mathematical operation 的定义:
w = -a_{n-1}2^{n-1} + a_{n-2}2^{n-2} + ... + a_{0}2^{0}
以二进制数11111001
为例。如果没有 TCR,我们可以将其解释为 2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 1 = 249
。使用 TCR(即应用数学运算),我们将其视为 -2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 1 = -7
.
同样,对于另一个二进制数,说00000111
。如果没有 TCR,我们将其视为 2^2 + 2^1 + 1 = 7
。对于 TCR,我们将其视为 2^2 + 2^1 + 1 = 7
,与前者相同。
回到你的场景
您的 4 步操作本质上是:获取给定数字取反的 TCR。
还是以11111001
为例,经过你4步操作后,变成00000111
,也就是7
,即-7 (11111001)
的否定.同样,经过你的4步操作,00000111
变成11111001
,也就是-7
,即7 (00000111)
的否定。因此,您的 4 步操作的结果是调用 Two's Complement Negation,而不是 Two's Complement.
为什么容易混淆?
一个原因可能是:几乎所有计算机都采用了 TCR 概念。假设一台8位的计算机,当我们想看我们的计算机如何显示十进制数7
时,我们的计算机会直接打印出7
,这对大多数人来说是非常直观的。但是,对于十进制数249
,它通常不会“服从你的命令”,而是打印出另一个值:-7
.
反之,如果你想让你的电脑显示-7
,根据Cornell University's Lecture Notes,你需要做的事情是:
- 从
-7
的绝对值开始,即7
; - 将
7
的二进制表示(即00000111
)作为输入。 - 反转位。
- 加一个。 (请注意,1~4 与您的 4 步操作完全等价)
- 将结果输入您的计算机。
然后我们的计算机将得到一个二进制表示 11111001
(它是十进制的 249
),并且它会在您的屏幕上显示为 -7
。
在这种情况下,您可以公平地说,在使用 TCR 的 8 位计算机中,-7
是二进制补码的 替代 表示 249
。这句话虽然不太规范,但对刚接触TCR概念的人有所帮助。