首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为什么负数补码的最高位肯定是1?该怎么处理

2012-04-03 
为什么负数补码的最高位肯定是1?为什么负数补码的最高位肯定是1?[解决办法]这个嘛,要问问制定补码规则的人

为什么负数补码的最高位肯定是1?
为什么负数补码的最高位肯定是1?

[解决办法]
这个嘛,要问问制定补码规则的人了
问问他为什么要用最高位1表示负数,而不是用0
[解决办法]
那你明白什么是负数补码了吗?明白了自然就明白为什么首位肯定是1了。

而且如果不是,怎么区分它和与它相对应的那个正数?
[解决办法]
因为正数的最高位肯定是0,加反加1如果不进位那就是1,如果进位最高位也是1,除非溢出

[解决办法]
Ferrerox()
补码最高位是符号位,用0表示正数,1表示负数
你这样相当于在问,为什么男人的身份证号码最后一位是奇数,女人身份证号最后一位是偶数(15位身份证号)
[解决办法]
> > 我知道啊,负数的补码是原码取反加1,那为什么补码的最高位会是1呢?
——首先这是一种简单的计算方法,并非补码的定义。
——第二,这种计算方法只是为我们指出了除最高位(可以理解为符号位)之外的位的计算方法,并不是说符号位也参加这个运算。你可以这样记忆:在补码中,负数的最高位是1,其它的位按你所说的方法计算。
[解决办法]
看看这篇文章,帮助丰富一下知识。编码是一种人为的、目的性很强的规范,了解规范的历史就能帮助你解释那些为什么。千万不要钻牛角尖哦 ;)

http://dev.csdn.net/develop/article/17/17680.shtm
[解决办法]
举个例子:原码是1000 0000 0000 0001,取反加1得到补码就是0111 1111 1111 1111,最高位就是0不是1。这是为什么?
要回答你这个问题
我还是给出几个链接吧:这个链接通俗的介绍原码、反码和补码。
http://hi.baidu.com/bluesea/blog/item/3c3f8a821f8d0f90f603a6d1.html
下面这个链接介绍了“反码和补码技术是怎样被提出的? ”

http://www.tianyablog.com/blogger/post_show.asp?BlogID=227218&PostID=7046448
[解决办法]
为了节省你的时间,我就给你转贴出来吧:
出处:http://hi.baidu.com/bluesea/blog/item/3c3f8a821f8d0f90f603a6d1.html

只有有符号的整数才有原码、反码和补码的!其他的类型一概没有。虽然我们也可以用二进制中最小的数去对应最小的负数,最大的也相对应,但是那样不科学,下面来说说科学的方法。还是说一个字节的整数,不过这次是有符号的啦,1个字节它不管怎么样还是只能表示256个数,因为有符号所以我们就把它表示成范围:-128-127。它在计算机中是怎么储存的呢?可以这样理解,用最高位表示符号位,如果是0表示正数,如果是1表示负数,剩下的7位用来储存数的绝对值的话,能表示27个数的绝对值,再考虑正负两种情况,27*2还是256个数。首先定义0在计算机中储存为00000000,对于正数我们依然可以像无符号数那样换算,从00000001到01111111依次表示1到127。那么这些数对应的二进制码就是这些数的原码。到这里很多人就会想,那负数是不是从10000001到11111111依次表示-1到-127,那你发现没有,如果这样的话那么一共就只有255个数了,因为10000000的情况没有考虑在内。实际上,10000000在计算机中表示最小的负整数,就是这里的-128,而且实际上并不是从10000001到11111111依次表示-1到-127,而是刚好相反的,从10000001到11111111依次表示-127到-1。负整数在计算机中是以补码形式储存的,补码是怎么样表示的呢,这里还要引入另一个概念——反码,所谓反码就是把负数的原码(负数的原码和和它的绝对值所对应的原码相同,简单的说就是绝对值相同的数原码相同)各个位按位取反,是1就换成0,是0就换成1,如-1的原码是00000001,和1的原码相同,那么-1的反码就是11111110,而补码就是在反码的基础上加1,即-1的补码是11111110+1=11111111,因此我们可以算出-1在计算机中是按11111111储存的。总结一下,计算机储存有符号的整数时,是用该整数的补码进行储存的,0的原码、补码都是0,正数的原码、补码可以特殊理解为相同,负数的补码是它的反码加1。下面再多举几个例子,来帮助大家理解!

十进制 → 二进制  (怎么算?要是不知道看计算机基础的书去)
47   → 101111

有符号的整数    原码    反码    补码
  47      00101111  00101111  00101111(正数补码和原码、反码相同,不能从字面理解)
 -47      10101111  11010000  11010001(负数补码是在反码上加1)
“反码和补码技术是怎样被提出的? ”

出处:http://www.tianyablog.com/blogger/post_show.asp?BlogID=227218&PostID=7046448
======================1.预备知识。==================
注意:此处的 '== '是相等的意思。 '= '是赋值的意思。
在机器世界里:
正数的最高位是符号位0,负数的最高位是符号位1。
对于正数:反码==补码==原码。
对于负数:反码==除符号位以外的各位取反。
     补码==反码+1.
     原码==补码-1后的反码==补码的反码+1。(读完本文后,应该能够直观地认识到本式的正确性)

可以轻易发现如下规律:
自然计算 :a-b==c.
计算机计算:a-b==a+b的补码==d.
c的补码是d.
通过此法,可以把减法运算转换为加法运算。

所以补码的设计目的是:
1.使符号位能与有效值部分一起参加运算,从而简化运算规则.
2.减运算转换为加运算,进一步简化计算机中运算器的线路设计.

=====================2.灵感由来。=================

概念定义:
还记得初中数学里的“补角”的概念吧。
两数之和等于100时,这两个数叫做互为“补数”,100称做“和数”。
如果B+C==100,则
A-B==A-(100-C)==A+C-100.
可以肯定:A-B=A+B的补数-和数。

把这个方法引入机器世界:
设int是8位整数(最高位是符号位),和数H是9位:1 0000 0000.
a,b是任意两int.
显然,a+a的补码==H,H溢出那个最高位之后就剩下了int值0.
①.输入a-b,
②.机器将a-b化个装后喂给加法器:(a的补码)+(-b的补码),它等于c.


不要忘了,c是一个补码.
③.输出:c的原码.

赋值A=a,B=b后,比较一下:
a-b==(a的补码)+(-b的补码)==c.//此处的c是补码形式。
A-B==A+B的补数-和数==C.//此处的C是数字,可以认为它就是原码形式。
if(C> =0) C==c==c的原码;( '== '是相等的意思,并非赋值)
else C==c的原码;

这个“补码”中的“补”,跟初中学的那个“补”是一个意思。
数学中的概念名称真还不是随便定义的,比如“数理逻辑”,故名思义就是:用“数学语言”来理清“逻辑”。
end.


[解决办法]
> > 原码是1000 0000 0000 0001,取反加1得到补码就是0111 1111 1111 1111,最高位就是0不是1。这是为什么?

——那只是一个简单计算法,说的是除最高位之外,取反加1。
或者也可以理解成把相对应的相同绝对值的正数整体取反加1。

[解决办法]
还没弄明白?
原码是1000 0000 0000 0001,取反加1得到补码就是0111 1111 1111 1111,最高位就是0不是1。这是为什么?
措!
为什么?
0和正整数就是原码
负数以补码形式存储
你的意思是-1的补码吧?
原码是0000 0000 0000 0001,取反加1得到补码就是1111 1111 1111 1111
关键是理解,请看一下此层上面第二层和第三层
[解决办法]
你要取负,就必须有来表示符号的01代码啊.
制定成这个样子..记住就行了..要问也问不到了那个创造这个当时的想法和灵感了哈~
[解决办法]


这是人为约定的。
因为要用一个有限的位数来表示符号数(我们不可能有一个无限大的东西来表示无穷的数),所以要考虑合适的正数和负数的范围,习惯上当然是正数和负数的范围最好是一样或者差不多一样;那么平分位数最好啦,这样的话,用2进制表示数的时候,刚好可以用最高位来表示平分范围的数:最高位为1的时候是一半的范围的数,为0的时候是另一半的范围的数。

比如我们用两位2进制的数来表示我们的符号数,那么数的范围为:00,01,10,11;高位为0的是两个数,高位为1的也是两个数,那么我们就可以用其中一组来表示负数,另一组用来表示正数,至于具体用哪一组来表示正负,那就看我们的约定了:约定就是这么来的。用高位为0的来表示负数也未尝不可,只是,这样的话,“0”也算归入了负数,这样用感觉不怎么好啊
[解决办法]
各位兄弟。最高位是符号位。
正数的补码是其原值,若存在负数的补码最高位为0,那它肯定和某个正数的补码冲突。
最高位是符号位,用来区分正负的。否则就分不清一个补码的原码到底是正是负了。
[解决办法]
我还想请教各位:是不是一定要书上写出这个理由才算数?
[解决办法]
具体还真不知道呢
[解决办法]
举个例子:原码是1000 0000 0000 0001,取反加1得到补码就是0111 1111 1111 1111,最高位就是0不是1。这是为什么?

这个不对吧
[解决办法]
mark
[解决办法]
人为的约定
[解决办法]
同上
[解决办法]
赶紧结贴,不要搞了.

热点排行