原码、反码和补码

java中的整数都是有符号的,使用补码来表示,其中最高位是表示符号位,正数则最高位是0,负数是1

为了表示一个整数的补码,我们先了解下原码,反码。

一、原码、反码和补码概念

原码,则直接使用二进制来表示整数,

反码,正数的反码和原码相同,负数的符号位不变,其他数值们取反,即,0变1,1则变成0。

补码,正数的补码和原码相同,负数则求得它的反码再加1 便得到补码。

如,java中是用8个比特来存储byte类型的,

byte类型的  1,原码 0 000 0001,反码 0 000 0001,补码是  0 000 0001,

byte类型的 -1,原码 1 000 0001,反码 1 111 1110, 反码加1,则 补码是  1 111 1111,

二、整数类型的取值范围

类型范围
byte8比特,带符号,二进制补码(-2 ^ 7 至 2 ^ 7 -1)
short16比特,带符号,二进制补码(-2 ^ 15 至 2 ^ 15 -1)
int32比特,带符号,二进制补码(-2 ^ 31 至 2 ^ 31 -1)
long64比特,带符号,二进制补码(-2 ^ 63 至 2 ^ 63 -1)
char16比特,不带符号,Unicode字符(0 至 2 ^ 16 -1)

其中,

" ^ "是表示幂的意思,如2 ^ 7表示2的7次幂。

三、补码的运算

了解补码运算前,先了解下补码中 模 的概念,

模的概念

如上面提到的byte是用8个比特存储的,那么它的模就是 2 ^ 8 = 256 ,以此类推,int的模是2 ^ 32, long的模就2 ^ 64

在补码中,最高位的符号位也参与 到运算中,运算后的进位值不管是0还是1,都会被运算器丢弃,所以两个整数运算的结果如果超过该整数类型的模后,也不会异常,因为最高们的进位值被丢弃,只是会得到不准确的值


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值