数据的表示 (原码反码补码移码)

目录

原码

反码

补码

移码

表示的范围


原码

1.原码是将数字转换为二进制。

2.原码必须符合八位,如果不满足八位就从右向左补0。(从右往左的最末尾位是符号位根据正负再判断补0或是补1)

3.原码的从右往左的最末尾位是符号位,正数为0,负数为1。

数值1数值-11-1
原码0000 00011000 00011000 0010

1 - 1 =0000 0001 + 1000 0001 = (1000 0010)2 (二进制,逢二进一)=(-2)10(十进制的-2)

1 - 1 按照常理应该为0,但是此处得出不为0,代表着原码间不可做运算。


反码

1.正数的反码还是原码。

2.负数的反码符号位不变。

2.负数的反码(除符号位)按位取反。

数值1数值-11-1
原码0000 00011000 00011000 0010
反码0000 00011111 11101111 1111

1 - 1 进行反码运算为1111 1111,对其进行取反(跟取反码操作一致)就可知道其原码是(1000 0000)2 = (-0)10(就为-0)这在一定程度上来说反码间是可以进行运算的,但是0为负来说用反码来进行运算又不太准确。


补码

1.正数的补码还是原码

2.负数的补码= 反码+1

数值1数值-11-1
原码0000 00011000 00011000 0010
反码0000 00011111 11101111 1111
补码0000 00011111 11110000 0000

这时的1-1便是十进制的 0,代表着补码进行运算是比较准确的。


移码

  • 将符号位转变(正数为1,负数为0)

  • 这是因为在正常逻辑观念里,正数应该比负数大,这样在数轴上面也能更好的表示。也不难发现,这很好的解开了反码间的运算导致0出现负数的情况。

数值1数值-11-1
原码0000 00011000 00011000 0010
反码0000 00011111 11101111 1111
补码0000 00011111 11110000 0000
移码1000 00010111 11111000 0000

移码间可以进行正常的运算。


表示的范围

为什么补码会比原码、反码少一位?

二进制十进制二进制十进制
原码0000 000001000 0000-0
反码0000 000001111 1111-0
补码0000 000000000 0000-0

原码与反码的0与-0表示不同,而补码的0与-0表示相同,这就是补码比原码、反码少一位的原因。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值