原码、补码

原码(true form)

原码就是二进制定点表示法,即最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小。(0有两种表示:+0和-0)
[+7]原= 0 0000111 B
[-7]原= 1 0000111 B
//进行加减法不够方便:每次运算前要先比较两数的大小,确定被减数和减数以及运算结果的正负性
//还有两个零。。

反码(one’s complement):

正数的反码(/一补数)与其原码相同;负数的反码为对该数的原码除符号位外各位取反。
[+7]反= 0 0000111 B
[-7]反= 1 1111000 B
//解决了加减法的问题,但还是有两个零

补码(two’s complement)

正数的补码(/二补数)和原码相同;负数的补码则是符号位为"1"这个"1"既是符号位,也是数值位 ,数值部分按位取反后再在末位(最低位)加1。也就是"反码+1"。
//n位二进制系统中,-a的补码转化为10进制数实际=2^n-a
[+7]补= 0 0000111 B
[-7]补= 1 1111001 B

  • 在计算机系统中,数值一律用补码来表示(存储)。 补码系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。只要一种加法电路就可以处理各种有符号数加法,而且减法可以用一个数加上另一个数的补码来表示,因此只要有加法电路及补码电路即可完成各种有号数加法及减法,在电路设计上相当方便。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
  • 另外,补码系统的 0 只有一个表示方式,这点和一补数系统不同(在一补数系统中,0 有二种表示方式),因此在判断数字是否为 0 时,只要比较一次即可。
  • 采用补码进行运算,所得结果仍为补码。
  • 对补码再求一次补码就为真值的原码。

参考:360百度&&正数的原码,反码,补码


原理:

补码的运算原理和“模”的概念有关:https://baike.so.com/doc/4026477-4224034.html
“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。例如:

时钟的计量范围是0~11,模=12。

表示n位的计算机计量范围是0~2^(n)-1,模=2^(n)。

“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。

例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:

一种是倒拨4小时,即:10-4=6

另一种是顺拨8小时:10+8=12+6=6

在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。

对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。

对于计算机,其概念和方法完全一样。n位计算机,设n=8, 所能表示的最大数是11111111,若再加1称为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系统的模为2^8。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。

小数补码求法:一种简单的方式,符号位保持1不变,数值位从右边数第一个1及其右边的0保持不变,左边按位取反。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值