问题
原码、反码、补码都是什么?
二进制二进制就是「逢二进一」,跟十进制没有什么本质区别。
二进制转换到十进制
1001 = 2^3 + 0^2 + 0^1 + 1^0 = 9
十进制转换二进制,可以使用短除法,下面演示13转换成二进制1101
原码是指一个二进制数左边加上符号位所得到的码,二进制数大于0时,符号位为0,二进制数小于0时,符号位为1。
计算机中所有的数均用0、1编码表示,数字的正负号也不例外,如果一个机器数字长是n位的话,约定最左边一位用作符号位,其余n-1位用于表示数值。
小数原码定义例如:[+0.1011]原 = 0.1011000,[-0.1011]原 = 1.101100
代码中的小数点“.”是在书写时为了清晰起见加上去的,在机器中并不出现。
整数原码定义例如:[+1011]原=00001011,[-1011]原=10001011
原码优点简单直观;例如,我们用8位二进制表示一个数,则+11的原码为00001011,-11的原码就是10001011。
原码缺点原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,而在二进制中00000001+10000001=10000010,换算成十进制为-2。显然出错了。
补码是一种用二进制表示有符号数的方法,也是一种将数字的正负号变号的方式。
下面用4位的补码数字来说明补码系统的数字表示方式。
在表示正数和零时,补码数字和一般二进制一样,唯一的不同是在补码系统中,正数的最高比特恒为0,因此4位的补码正数,最大数字为0111 (7)。
补码数字的负数,最高比特恒为1,4位补码的数字中,最接近0的负数为1111 (-1),以此类推,因此绝对值最大的负数是1000 (-8)。
以上的表示方式在电脑处理时格外方便,用以下的例子说明:
0011 (3) + 1111 (-1) -------------- 10010 (2)
10010似乎是错的,但是结果超过四个比特,忽略第五个比特,结果是0010(2),跟计算结果是一样的。
另外还可以将1111变号为0001(1),那上面的是式子也可以当作减法计算3-1=2,结果还是一样的。
原码求补码在计算二进制数字的补码时,会将数字进行比特反相运算,再将结果加1,不考虑溢出比特(一般情形,溢出比特会为0),就可以得到该数字的补码。
正数和0的补码就是该数字本身。
负数的补码则是将其对应正数按位取反再加1。
-5 => 对应整数 => 00000101 => 按位取反 => 11111010 => +1 => 11111011
补码求原码
正数原码就是补码
负数的原码就是补码的补码
11111011(-5) => 按位取反 => 10000100 => +1 => 10000101 => -5
反码
是用来由原码求补码或者由补码求原码的过渡码。
正数的反码与其原码相同。
负数的反码是对正数逐位取反,符号位保持为1。
本文发布于:2023-02-28 21:01:00,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1677717153100646.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:原码反码补码(原码反码补码怎么算).doc
本文 PDF 下载地址:原码反码补码(原码反码补码怎么算).pdf
留言与评论(共有 0 条评论) |