首页 > 解决方案 > 找出负二进制数和正二进制数之间的差异

问题描述

我知道我们可以用几种方式表示二进制数,但我真的不确定如何区分正二进制数和负二进制数。

如果我们有 number +13,那么它的二进制表示如下所示: 1101

它的负面表示如下所示:

11101

我的理解是,如果您需要区分它们,那么存在的0数量很重要+13

01101

即便如此,我仍然无法区分:

11101 ///Here is the representation of -13

和:

11101 ///Here is the representation of +29

我知道这里使用了另一种称为“二进制补码”的方案,我需要应用它。

如何区分这两种二进制表示?

标签: cbinary

解决方案


正如其他人所说的那样,我可以将这两种二进制表示区分为没有意义的问题。位序列是中性的,当您将其转换为数字时,您将针对给定的表示进行转换。它可以表示一个int、一个unsigned int、一个浮点数或任何你想要的。就像如果我问你什么是硬币,这个词在英语和法语中存在(至少?)具有完全不同的含义(法语单词coin在英语中的意思是),要回答我,你需要选择一种语言,没有你就无法回答。

关于“二进制补码”,它是与我们 CPU 中使用的标准表示兼容的方式来更改signed int的符号。第一个补码是将所有 0 替换为 1,将所有 1 替换为 0,第二个补码是将前一个结果加 1。

假设字有 5 位,则int值 13 是二进制的 01101。如果我们想要 -13,13 的第一个补码得到 10010,加 1 得到 10011。

但仍然有 5 位字,无符号整数的 10011对应于值 19。

对于5 位的int,根据定义,如果我们尝试更改其符号,则较低的负数是 10000:第一个补码 = 01111,加上 1 = 10000!实际上有一个溢出,5位是不够的。


推荐阅读