计算机的二进制带符号运算为什么用0表示正数1表示负数

以8b为例对比如下:(谁能给我补补课,说说为什么是正0负1,按照我的理解应该是正1负0更符合人类的思维,前者是进行了一次技术上的mapping了)


正号:0
负号:1

原码:
+1 0 000 0001
-1 1 000 0001

反码:
+1 ...
-1 1 111 1110

补码:
+1 ...
-1 1 111 1111


1+(-1)=0

  0 000 0001
  1 111 1111
------------
10 000 0000  = (+0)


而如果反过来就会是这样的:

正号:1
负号:0

原码:
+1 1 000 0001
-1 0 000 0001

反码:
+1 ...
-1 0 111 1110

补码:
+1 ...
-1 0 111 1111


1+(-1)=0

1 000 0001
0 111 1111
------------
10 000 0000  = (溢出位 8b考虑为 +0)


20090601
相关链接:
http://dev.csdn.net/develop/article/17/17680.shtm


逆向推理:

先有正数运算,再有负数,才会产生有符号运算所遇到的问题。
按照离散数学的原理,需要解决的问题有两个:
1、负0怎样才能和正0具有相同的标志;
2、其他负数如何确定各自的标志;
3、运算规律是否可行;

下面给出我的推导过程及最后的公式,我觉得 原码和反码的转换公式要比以前我看到的教程简单很多。
一、拿二位10进制为例
可得排列组合(标志)为00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19 共计2*10^1 = 20 个数,为正数1~9 、 0 、和负数10个。(因为正数和0在负数概念出现以前已经确定,所以剩下的数为负数)。


二、拿二位2进制为例
同理有标志00 01 10 11,00为+0,01为+1,推理另两个标志对应的负数。

 


结论

同样的方法可以放到三位二进制 ,四位二进制等,表示为x位n进制可得到公式:
负数原码和补码的转换公式:
1v = -(n^(x-1)-v)
放到8位2进制即:

1v=-(2^7-v)


代入8位二进制即使
1000 0000 = - (2^7-0)= -128;
1000 0001 = -(2^7-1) = -127;
1000 0002 = -(2^7-2) = -126;
...
1111 1111 = -(2^7-(2^7-1)) = -1;

 

"-1就是减1嘛,想一想00000000减去1应该是多少呢,不够就借位,那就是11111111"

这句话同样体现了前提:不破坏先前的正数(包括0)的运算法则。

 

结:那些计算机教材写得真垃圾啊,就这么简单的问题搞锤子求反+1 ,基本上无逻辑可言。

结合离散等数学知识,这个问题是不是可以延伸到内存寻址等相关方面呢?

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 有符号负数和有符号正数可以进行加法运算,但是在计算时需要注意符号位的处理。如果两个符号相同,则直接将它们的绝对值相加,并将结果的符号位设为这两个符号位。例如,-3 + (-5) = -(3+5) = -8。如果两个符号不同,则需要先将它们的绝对值相减,再用绝对值较大的符号作为结果的符号位。例如,-3 + 5 = 5 - 3 = 2。 ### 回答2: 有符号负数可以直接加有符号正数。在学和计算机科学中,我们使用带有符号的整表示负数正数。有符号负数和有符号正数的相加,可以通过简单地将它们的绝对值相加,并且将符号赋予和的结果。 例如,在十进制中,-5 + 3 等于 -2。我们可以将-5的绝对值(即5)与3相加,并保留号来得到-2。 在计算机中,有符号负数和有符号正数的相加也是类似的。计算机内部使用二进制以补码形式表示符号。当我们将一个负数与一个正数相加时,计算机会将它们的绝对值相加,并根据和的给出确的符号位。 总之,有符号负数可以直接与有符号正数相加,只需将它们的绝对值相加并保留确的符号即可。这适用于运算计算机编程中。 ### 回答3: 可以直接加有符号负数和有符号正数。 有符号负数是指在值前面有一个号的,而有符号正数是指在值前面有一个号的。在学中,我们可以将有符号负数和有符号正数进行加法运算。 具体操作上,我们首先要将两个符号进行比较。如果两个符号相同,那么我们只需要将它们的绝对值相加,并且保留相同的符号。比如,-3 + (-5) = -8。 如果两个符号不同,那么我们需要将它们的绝对值相减,并且结果的符号与绝对值较大的符号相同。比如,-3 + 5 = 2。 总之,有符号负数可以直接与有符号正数进行加法运算,但需要注意符号的比较和结果的符号确定。在计算机科学中,也可以通过二进制补码表示符号负数和有符号正数,并进行加法运算

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值