【发布时间】:2021-02-16 06:50:56
【问题描述】:
据我所知,如果我想以二进制形式表示-1,那么:
-
我将首先查找 1 的二进制表示,即 0001。
-
然后我会找到一个补码(将所有 0 和 1 取反)得到 1110。
-
然后将最低有效位加 1,得到 1111。这是我的答案。
但是我有疑问,如果我将 1(在第 1 步中)表示为 001(我相信我们可以做到这一点),那么一个补码将是 110,加 1 会得到 111,这与我得到的不同以前。
您如何解释这种差异?
【问题讨论】:
-
想想你有
N可用位,它提供了从 0 到 2^N - 1 的总范围。但是你想允许负数,所以你将值空间分成两半 - - 一半用于正面,一半用于负面。为了实现这一点,你牺牲了一点。在一个补码中这很容易,但是有一个问题,因为零变成了两种表示形式(+0 都是 0 位,-0 都是 1 位)。二进制补码通过加 1 来解决这个问题,这允许存在一个额外的负数。 -
你的推理很好,唯一的区别是你用来表示整数的位数。
标签: c binary numbers binary-data