源码反码补码深入理解,很详细,通俗易懂(一道例题引入)

在这里插入图片描述
class Data{
public static void main(String[] args) {
byte a=(byte)130;
System.out.println(a);//答案:-126
}
}
计算这个题我们首先要明白一个原则(源码补码反码的相互转换)

  • 正数:源码反码补码都一样
  • 在这里插入图片描述
  • 负数的源码反码补码转换原则:
  • 源码–反码:符号位不变,其余各位由0–1,1–0相互转换
  • 反码–补码:符号位不变,在反码的基础上进行加一操作
  • 130本身是一个int类型的整数(byte整数范围(-128-127))
  • 将130强制转换为byte类型需要进行截取操作
  • 以下就是计算方法:
  • int类型的数占4个字节,每个字节又占8位 如下:
  • 130的二进制数为
  • 00000000 00000000 00000000 10000010 这既是130的源码也是反码还是补码 (正数)
  • 强制转换进行截取操作
  • char类型的数占一个字节,每个字节8位 截取出byte类型(从左往右截取字节,只留下一字节就是130byte类型的补码)
  • 所以为 :10000010这个结果是补码(我们得将这个数转换成源码就是我们所想得到的数)
  •    补码:  1       0000010
    
  •         符号位        数值位
    
  •    反码   1       0000001(补码--反码符号位不变,在补码的基础上减一)
    
  •         符号位       数值位
    
  •    源码   1       1111110(反码--源码符号位不变,在反码的基础上各位由0--1,1--0相互转换)
    
  •         符号位       数值位
    
  •    所以可以得出int类型正数130强制转换成char类型整数值为-126
    
  • 在这里插入图片描述
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值