原码、反码、补码简介

本文详细介绍了有符号数在计算机中的表示方式,特别是Java中如何进行原码、反码和补码的转换。通过具体的例子展示了正数、负数和0在不同编码下的变化,并提供了Java代码实现这些转换。理解这些概念对于深入理解计算机底层的数值处理至关重要。

有符号数,左边第一位是符号位,0为正,1为负。在java中都是有符号数。

##.转换关系

原码:最左侧为符号位,用剩余数位来表示绝对值;

反码:正数和0,反码为其本身;

           负数的反码,符号位不变,其余各位数字取反(0变1,1变0)。

补码:正数和0,补码为其本身;

           负数的补码,在反码基础上,不考虑符号位,最末一位加1。

##.java代码中转化

代码中可用位运算,原码转反码,以int值为例,若a为负整数,则a的反码为:

int b = a ^ Integer.MAX_VALUE;

或    int b = -(~a);

注:java中位运算,会对符号位也做运算。

补码为:b = b-1;  //因为b是负数,所以最后一位加1,在真值上等同于减1.

真值:有符号数,不考虑符号位,剩余数位所组成数字的值,等于真值的绝对值

以java中byte类型正数为例:

十进制

原码

反码

补码

1

0000 0001

0000 0001

0000 0001

-1

1000 0001

1111 1110

1111 1111

0

0000 0000

0000 0000

0000 0000

-128(Byte最小值)

1000 0000

1111 1111

1000 0000

127(Byte最大值)

0111 1111

0111 1111

0111 1111

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值