和补码有关的一道java题

来源:百度知道 编辑:UC知道 时间:2024/06/27 23:54:13
题目如下:
byte a=-128;
byte b=(byte)(~a>>128);
System.out.println(b);
非常想知道~a究竟等于多少呢?是用-128的补码进行运算,还是原码?
另外就是~a>>128这个计算有没有简便算法。
~a=127
那么~a>>128的结果是什么?有什么更简便的算法吗?

byte 在计算机中占8个位,其中第一个位表示正负号, 其它七位表示数值大小。所以byte的数值范围是: -128~+127
正数为0 表示,负数用1表示
如果用二进制表示则数值范围为: 10000000~01111111

-128 用二进制表示为: 10000000

位运算的反运算是对某数值进行按位取反,也就是说对这8位每位进行取反。
取反:~ 10000000等于 01111111
所以 ~a=127

0

(1)首先请将-128换成二进制的补码形式,因为在计算机里就是如此,然后a是取的后8位,因为它是byte只能是8位
(2)然后请确定一下~ 与>>的优先级
(3)将~a>>128取后8位就是b值。
(4)如果您总是想简单算法,请放弃。那不利于你学习