原码,反码和补码

原码、反码和补码是几乎所有计算机教材的第一课,很基础也很简单,由于这些内容一直跟二、四、十六进制的转化放在一起,我从来都是跳过这章直接往下看的,直到有一天,我自己被一个超白目的问题难倒了……

”将-3右移2(bit)位,结果是多少?”

一下子,我发现,在过去的学习中我挑食了,现在补上这一课。

原码,是自然数值的机器数表示。具体的表示规则是这样的:最高为作为符号位,剩下的位是数值位。比如-3原码表示为10000011(如图)。原码的数值表示范围跟二进制的位数有关,如8位二进制数最大的表示范围是-127~+127之间(最高位是符号位)。

反码,是机器数运算过程的中间表示形式。具体规则是:正数的反码和原码相同;负数的反码是符号位不变,其他位按位求反得到的。如,-3的补码是11111100。

补码,是机器数的运算表示形式。引入了补码克服了原码的局限性(由于符号位要单独操作,运算方法比较复杂),使得计算减法可以用计算加法的方式得到;补码另外的优点是,数字0补码表示的唯一性。具体的规则是:正数的补码和原码相同;负数的补码是反码末位加1。如,-3的补码是11111101。

然后,运算器对数值进行右移操作,负数补1,正数补0,得到11111111。从符号位看,代表的是负数,还原成原码方法是求补码的补码,得到原码10000001,代表十进制数-1。

2009022716214319.jpg

总结一下:

正数的原码,反码和补码相同。

负数的反码是原码保持符号位不变,其他位按位求反;补码是反码加1。补码还原是补码的补码。

左移操作即所有的高位舍去(包括符号位),右边(低位)补0;右移操作,所有的低位舍去(右移),高位(左边)负数补1,正数补0。

 

 

 

转载于:https://www.cnblogs.com/jerrylv/archive/2009/02/27/1399646.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值