二进制编码 小记

byte 范围 -128~~~127

(16进制)0xFF =(二进制) 1111 1111 = (int)256
解为:
首一位为符号位 -
整体取反码 0000 0000 加1 为0000 0001 为1 加上符号为 (byte) -1

例如 (16进制)0x7F =(二进制) 0111 1111 = (int)127
解为:
首一位为符号位 +
正的补码,反码均为自己 111 1111 为1 加上符号为(byte) 127

(byte)-127 的 127原码 111 1111 反码为 0000 0000 补码加1 为000 0001
加上符号位 1000 0001 即表示(int) 129

(byte) -128的数值128原码 1000 0000 反码为0111 1111 补码加1 为1000 0000
加上符号位(覆盖) 1000 0000 即表示 (int)128

(byte)-1 的 1原码 000 0001 反码为 1111 1110 补码加1 为1111 1111
加上符号位 1111 1111 即表示 (int)255

正的补码,反码均为自己

(byte)1 的 1原码 0000 0001 反码为000 0001 补码为0000 0001
加上符号位 0000 0001 即表示 (int) 1

总结

byte a;
int b;
b=a>=0?a:256+a;

将a作为int类型向控制台输出的时候,jvm作了一个补位的处理,因为int类型是32位所以-1补位后的补码就是1111111111111111111111111 1111 1111(32位),这个32位二进制补码表示的也是-1.
& 0xFF就可以得到 (int)255

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值