反码补码原码问题

先上图:

 

 

总之:

数的绝对值二进制展开------------------>原码

原码按位取反------------------------------>反码

反码+1--------------------------------------->补码

 

负数的二进制是补码形式,正数的二进制是原码形式。

正数首位为0,负数首位为1。

 

习题:

我们知道byte的数据范围在-128~127之间。执行以下运算,输出是多少?

int x=126;

byte y=4;

y=(byte)(x+y);

 

解析:

假设y为int型,则130未超出int的正值范围,则会输出130.但130超出了byte的正值范围,故而不会输出正值130,而是输出一个负数。那输出是多少呢?我们可以将130二进制展开:1000 0010,我们知道首位为1表示负数,而负数的二进制展开是补码形式的,补码减一得到反码:1000 0001。反码按位取反得到原码:0111 1110。这个二进制即是输出的负数绝对值的原码。由原码可知该负数的绝对值为126,故正确的输出结果为-126;

 

130---->1000 0010   得补码

补码减1---->1000 0001 得反码

反码取反---->0111 1110 得绝对值原码

0111 1110--->126  得绝对值

126-------> -126  得正确输出

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二百四十九先森

你的打赏是我努力的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值