计算机中补码的符号位可以不做特别对待而直接参加运算。求其证明过程。

如题所述

本文是针对“坐而论道”答主的讨论,因为评论只能限制两百字,所以我写到了回答的地方。题主的问题请看https://www.imooc.com/article/16813?block_id=tuijian_wz
以下是正文

我认为符号位就是人为加上的概念,因为计算机里面加不了负号,补码规则下数据的首位就是能反映正负。

在补码规则下,先不管那什么补码定义式(我也不知道这是个什么东西,百度也搜不出个所以然来),反正补码最高位如果是1,那这个数就是负数,所以为什么不把他当成符号位?

至你你说的度数,如果本来的度数是0°减去90°和加上270°的结果一样,那么你知道这个结果是正数负数吗?如果没有负数的情况下它是270°,如果有的情况下它是-90°。
->模
补码就是通过模这个概念诞生的,模就是计算时产生溢出的量,运算结果其实就是模的余数,所以计算机可以通过模把减法化成加法。关于模的概念可以去CSDN上搜,CSDN上一大堆这种文章。
然后是最核心的问题,有没有那个对照概念,比如八位二进制数255=-1,254=-2,我认为是没有的,这只是个前提推出来的结果,而非前提。计算机是通过ALU进行加法的。计算机的思想就是通过模的这个概念来进行,求真值的时候再取补。

本人才疏学浅,只学过一点计算机基础,不知道计算机内部真正的操作原理,但我认为计算机内部没有那个对照概念,只是通过模的概念设计补码,对照概念是补码的显示规则。就像-1的补码用无符号数表示正好是255,而不是设定成255是-1的补码。

如果你认为计算机内部就是通过对照表实现运算和显示真值的,请你发出来让我开开眼界。
如果你没有,请不要每天想搞一个大新闻,把搞计算机的批判一番。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-02
计算机中补码的符号位,呵呵,这就是忽悠出来的。

补码,有个定义式,按照定义求补码,根本就不涉及原码、反码,也没有什么符号位。

如果是 8 位二进制数,补码的定义式简化如下:

[X]补 = X ;当 X 大于等于 0 时
[X]补 = 256 - |X| ;当 X 小于 0 时

这里面,根本就没有符号位。
也就是说,所有的位的数,都可以参加运算。追问

那为什么在不发生溢出的情况下,计算结果会自动变换为正确的0,1值,即表示为其该有的符号位功能!!!

追答

根本就不存在这个所谓的符号位 !!!

补码理论,适用于任何的进制。

只有二进制,才被搞计算机的,硬是瞎编出来一个符号位,然后还说,符号位也参加运算。

他们就是敢于自己打自己的嘴巴。

--------

你想像一下,有一个小孩,只认识 0~99,也不会做减法。

为了做减法,你可以告诉他:-1,可以用+99 来代替:

  24 - 1 = 23

  24 + 99 = (1)  23

忽略进位,+99 和-1,功能是不是一样的?

那么,98,就能当做-2;

   97,也就是 -3;

   ……

   50,就是 -50。

这些正数,都可以代替负数使用。

这些正数,就称为:《负数的补数》。

求补数的公式,是: 补数 = 10^n + 负数。

--------

八位二进制是:0000 0000 ~ 1111 1111(十进制 255)。

那么,255,就能当做-1 来使用;

   254,就是 -2;

   ……

   128,就是-128。

由此,就可以推出《补码定义式》:

   X < 0 时,[X]补 = 256 + X。

通用的形式,是:[X]补 = 2^n-| X |,

      n 是二进制的位数。

而正数,则必须用原数进行计算,不许进行任何转换。

因此,也有人说,正数本身就是补码。

--------

128 ~ 255,其二进制的最高位是 1,这就被他们吹嘘成了符号位。

但是,50~99,在十进制中,也是代表负数的,他们就没有说的了。

 

补码理论,适用于任何的进制,你自己都可以归纳出来的。

比如,反转 90 度,可以用正转 270 度代替。 270,有符号位吗?

钟表,倒拨 20 分,可以用正拨 40 分代替。 40,有符号位吗?

符号位,是根本就不存在的。

按照《补码定义式》来求补码,根本就不涉及原码、反码,也没有什么符号位。

----------

另外,关于补码的来源,有人说到了“模”

其实,这也是一个诡辩

所谓的“模”,其实,就是《周期》。

常说的角度,+270 = 360 + (-90);

钟表的分针,+40 = 60 + (-20);

三角函数,+3π/2 = + (-π/2 );

三位十进制,补数 = 10^3 + 负数;

  (所以,-1,就与 +999 等效)

16 位二进制,补码 = 2^16 + 负数;

  (所以,-1,就与 65535 等效)

。。。

在上面各个算式中的正数,都是用《周期+负数》求出来的。

哪有什么“模”呀!

计算机专业的人,数学,普遍都没学好。

遇上弄不懂的,就自己胡乱编造一个词! 确实也唬了不少人。

本回答被提问者采纳
第2个回答  2019-11-08
不需要证明这个。
用 1、0 代表符号,就是让你直接进行运算的。
不仅补码的符号位,可以参加运算,
原码的符号位,也可以参加运算,
而且,反码,也可以这么算。
只是用补码来计算,得到的结果,才是正确的。
所以,在计算机中,只是使用补码。
相似回答