为什么零被视为正号?

阿卡什·乌伊瓦尔(Akash Ujjwal)

带符号的int或二进制数字

零被视为正号

1被视为负号。

例如 :-

1000 0000 0000 0110 = -6 
0000 0000 0000 0110 =  6

但是在脉冲形式中,将1视为正,将0视为中性。

         ---   ---   ---
         | |   | |   | |
---------   ---   ---   ---------

为什么?它背后有逻辑吗?

并可能以相反的方式处理它,即1表示正号,0表示负号

杰米·汉拉汉(Jamie Hanrahan)

您最初的断言并不是真的,不是针对绝大多数使用通用的CPU体系结构-它们使用“二进制补码算法”。

在2的补码算法中,如果高阶位为1,则表示负数;否则为0。但是如果高阶位为0,则不表示正数。它表示非负数差异是微妙的,但很重要。该数字可以为零,也可以为正数。

在2的补码中,数字比例看起来像这样-为了简单起见,我将使用八位整数:

二进制有符号无符号
01111111 127 127 
01111110 126 126 
 ... 
00000011 3 3 
00000010 2 2 
00000001 1 1 
00000000 0 0 
11111111 -1 255 
11111110 -2 254 
 ... 
10000010 -126 130 
10000001 -127 129 
10000000 -128 128

要在该系统中求反(算术求逆),即乘以-1:首先反转所有位,然后加1。因此,如果我们以1开头,然后反转位,则得到11111110。加1,我们有11111111。如上所述。请注意,如果再次执行此操作,则应返回到00000001。

计算机之所以使用此系统,是因为它使加法,减法等算术逻辑非常简单:相同的逻辑(简单的二进制加法器;您只需将所有位(包括符号位)相加)就适用于有符号数和无符号数。请注意,在该比例尺上将1加到任何数字上都会使您获得正确的答案...溢出情况除外:如果您将数字解释为带正负号,则在1到127之间加1会得到-128。但是溢出和进位等通常被条件标志或异常捕获。

我们有一个比我们有正数多的负数是一个奇数的补码怪癖。.因为零既不是负数也不是正数。因此,使用带符号的八位,我们可以表示-128,但不能表示+128。+127是最高正数。这不是什么大问题。

已经建立了一些使用“一个人的补品”的历史计算机(CDC 3000和6000系列,以及一些旧的Univac大型机;我不知道有任何现代示例)。作为补充,要反转数字,只需翻转位。除了负边从-127到... -0之外,这几乎与上面的结果相同。是的,在一个人的心目中。在机器上,您有两个零:正零和负零。这使得算法通常更加复杂。负零通常会在某个时刻转换为正。

您可能会认为它应该更像是“有符号的幅度”,这与我们通常写数字的方式类似。例如-2将是10000002。您会注意到,在该值上加上1不会为-1提供正确的带符号幅值表示。它给您-3。这使算法变得更复杂,这就是为什么不使用它的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么 JDBC 将端口零视为空(默认)端口?

来自分类Dev

为什么JavaScript如果数字以前导零开头,则将其视为八进制

来自分类Dev

宏被视为什么类型?

来自分类Dev

为什么返回零?

来自分类Dev

如何输出带正号和零的整数

来自分类Dev

为什么将WebFrameLoadDelegate视为未声明?

来自分类Dev

为什么将此hashCode()方法视为劣质?

来自分类Dev

为什么阻止未来被视为不良做法?

来自分类Dev

为什么将静态方法视为方法?

来自分类Dev

为什么我的xml文档被视为元素?

来自分类Dev

为什么将此对象视为右值?

来自分类Dev

列表框被视为Nonetype,为什么?

来自分类Dev

tryCatch:为什么将警告视为错误?

来自分类Dev

为什么将此视为未处理的异常?

来自分类Dev

为什么将int []视为右值?

来自分类Dev

为什么不将函数视为命名类型?

来自分类Dev

为什么getpass()被视为过时的函数?

来自分类Dev

为什么将此变量视为本地变量?

来自分类Dev

为什么将其视为最佳做法?

来自分类Dev

为什么将Punning类型视为UB?

来自分类Dev

为什么(var)被视为左值?

来自分类Dev

Rails为什么将请求视为JSON?

来自分类Dev

为什么将地址视为指针?

来自分类Dev

为什么我的 JSONModel 类被视为 NSDictionary?

来自分类Dev

为什么NSDictionary为零?

来自分类Dev

脾气除以零。为什么?

来自分类Dev

为什么longDoubleNum为零

来自分类Dev

为什么NSDictionary为零?

来自分类Dev

为什么Express'sendFile函数将304视为错误?