怎么求一个负数的原码和补码

怎么求一个负数的原码和补码,第1张

补码,来自于:补数。

一般的常识:

钟表时针,倒拨 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语言中负数的补码怎么求等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9780103.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存