Java位运算的理解

Java中的负数存储

举例:
-20
调用Integer.toHexString(-20)返回结果:ffffffec。
其中toHexString(int i)返回将整型参数作为无符号整数时的16进制字符串表示形式。这里的无符号数取值规则为:

  1. 如果实参为负数,则对应的无符号数为其值加上2^32;
  2. 否则,无符号数为实参本身。
/**
 * Returns a string representation of the integer argument as an unsigned integer in base 16.
 */
public static String toHexString(int i);

Java中的无符号数是以补码的形式存储的。
-20的原码、反码与补码

>>与>>>

>>: 带符号位的右移

带符号位右移时,保留符号位,正数右移高位补0,负数右移高位补1。
a = -20;
a >> 2后:

int a = -20;
int b = a >> 2;
System.out.println(b); //-5
System.out.println(Integer.toHexString(b)); //fffffffb

>>>: 不带符号位的右移

不带符号位右移时,高位统统补0。
a = -20;
a >>> 2后,变为正数。

int a = -20;
int b = a >>> 2;
System.out.println(b); //1073741819
System.out.println(Integer.toHexString(b)); //3ffffffb
posted @ 2021-10-02 22:14  羊之草原  阅读(76)  评论(0)    收藏  举报