补码,来自于:补数。
一般的常识:
钟表时针,倒拨 3 小时,可以用“正拨 9 小时”来代替。
同理,分针 倒拨 X 分,可以用 正拨 60-X 代替。
60 是分针的周期。
十进制数,两位:0~99,周期就是一百。
-1 可以用 +99 代替。
如: 25 - 1 = 24
25 + 99 = (1) 24
忽略进位 1 百,结果就是相同的。
那么,-1 的补数,就是 99 。
-2 的补数,就是 98 。
-X 的补数,就是 周期 + 该负数 。
--------
借助于补数,就可以用加法,代替减法运算。
所以,计算机就可以节省硬件了。
--------
八位二进制:0000 0000~1111 1111(0~255)。
周期是 256。
那么,-1 可以用 1111 1111 (+255) 代替。
即:
-1 的补码,就是 1111 1111 (= 256-1=+255) 。
-2 的补码,就是 1111 1110 (= 256-2=+254) 。
。。。
-X 的补码,就是 周期 + 该负数 。
-128,就可以用 1000 0000 (= 128)代替 。
正数,不需要变换,直接运算即可。
--------
在计算机中,负数,就是用补码存储、计算的。
原码和反码,毫无用处,它们在计算机中都不存在。
计算机中,只用补码表示正负数。
在计算机中,并不存在原码反码。
求补码,也有更简单的方法,也用不着原码反码。
所以,原码反码,都没有任何用处。
----
以八位码长,来说明计算机中的补码:
数字 0 的补码是:0000 0000。
数字 1 的补码是:0000 0001。
数字 2 的补码是:0000 0010。
。。。依次递增。。。
数字 127 的补码,就是:0111 1111。
负数,你就依次递减吧。
数字 0 的补码是:0000 0000。
数字-1 的补码是:0000 0000-1=1111 1111。(=255)
数字-2 的补码是:1111 1110。(=254)
。。。依次递减。。。
数字-128 的补码,就是:1000 0000。(=128)
----
由此可推出补码的定义:
零和正数的补码,就是该数字本身。
负数的补码,就是:256 + 该负数。
一般的计算机专业教材上,都有这个公式。
----
这就是:计算机中,正负数的存放格式。
其他说法如:原码反码符号位,都是人为瞎编的。
它们和计算机,没有任何关系。
正数,本身就是补码。
负数,就用它的正数,减一取反,即可得到补码。
如,已知:+9 的二进制是:0000 1001。
下面求-9 补码:
先减一:0000 1001 - 1 = 0000 1000;
再取反:1111 0111。
所以有:-9 补码 = 1111 0111。
这不就完了吗!
简不简单? 意不意外?
原码反码符号位,讨论这些垃圾干嘛?
这些垃圾,都是用来骗吃骗喝的!
当然是补码形式了,虽然负数也有用原码表示的(就是最高位变成1)。但是你可以发现如果用原码表示负数有一问题当数值从0增加到127时,原码从0~7F。但是一旦到了负数区域就从-0到-127,原码从80~FF,当他们进行转化的时候很不方便,而且又多了一个-0出来。显然是不希望了。
于是就有了反码,这个概念解决了正负数的对称问题,也就是说将-0~-127变成了-127~-0,这样的话就和0-127形成了很好的对称结构,只需要取反就可以得到相反数。但是,还没有解决-0的问题。
于是就有了补码这个概念,他的定义是将反码+1,刚好将-0给挤走了,增加了数值的值域(来了一个-128)。
计算机在运算的时候把所有的二进制全部当做无符号数来运算,并且负数全部采用补码(这样的话-0和+0的冲突就没了)。
小数的补码怎么计算,如果是负数
一样的计算,二进制的小数位的权重依次为2^-1,2^-2
负小数的原码 补码
1 小数点前1位表示符号;
2 从最低(右)位起,找到第一个“1”照写,之后“见1写0,见0写1”;
3 本题结果为:11100101
负小数的补码怎么求?
不用取反 让06875乘2 取整数 让后再乘2再取整 一直等于0068752=13750 那么整数为103752=0750 00752=15 1052=10 1所以06875的补码为01011000因为是负数再加1等于11011000
二进制负小数的反码(重点)和补码怎么算?尤其是整数部分比1大时怎么办?这时候符号位取在哪里?
约定字长8位:
[-1001001]原 =11001001
[-1001001]反 =10110110
[-1001001]补 =10110111
[-100001]原 =10100001
[-100001]反 =11011110
[-100001]补 =11011111
请问正小数和负小数求补码的原则。例如:0110001,-0001001,请给出详细过程,谢谢啊
若真值为纯小数,它的补码形式为,XsX1X2X3X4X5Xn,其中Xs表示符号位,补码的定义为:X补=X(0<=X<1)或2+X=2-/X/(-1<=X<0)(MOD=2)
纯小数在求它的原码、反码、和补码时方法和整数是一样的。
例如:X=-01011 系统要是规定为8位,那么它的原码为
[x]原=11011000 [x]反=10100111 [x]补=10101000
也就是说系统规定为8位,当位数不够的时候,要在最低有效数后面用0补齐,然后再求它的原码、反码、和补码。正小数也是按照这个方法。
怎么求正数 负数的补码?
先写成二进制(负数要在最首位写1作为符号位),然后符号位不变其他位按位取反(就是0变1,1变0)后按照正常的加法运算加1就是补码(不加1是反码)。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]补=11010101
小数二进制求其负数补码
小数,要用浮点数表示。
不仅仅是补码的问题。
机器字长位8位(其中含一位符号位),用补码运算规则完成下列运算。
A = +0001 0101,
B = -0110 1011,
求 A + B,并判断是否有溢出。
------------------
直接计算:A + B = -0101 011。
用补码计算:
A = +0001 0101, [ A ]补 = 0001 0101。
B = -0110 1011, [ B ]补 = 1001 0101。
求和: [ A + B ]补 = 1010 1010。
再由补码求真值: A + B = -0101 011。
判断是否有溢出:
这是,正数+负数!
绝不可能溢出。
以上就是关于怎么求一个负数的原码和补码全部的内容,包括:怎么求一个负数的原码和补码、负数在计算机中是用补码表示吗为什么我是新手,请大神指点,谢谢~~!、C语言中负数的补码怎么求等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)