Java 无符号整数移位
Java Bits Shift on Unsigned Integer
我知道 java 没有 unsigned int,但是从 Java SE 8 开始,有一些方法可以使用整数数据类型来执行无符号算术。我如何着手在 java 中将位移位到 "unsigned int"?
您执行所有按位运算的方式与对有符号 int
执行的方式相同,使用 >>>
右移。 "Unsigned" 特征仅用于输出和转换,它们不影响内部位表示。
例如:
int i = Integer.MAX_VALUE / 1024 - 1023;
System.out.println(Integer.toUnsignedString(i) + "=" + Integer.toBinaryString(i));
i = i >>> 10;
System.out.println(Integer.toUnsignedString(i) + "=" + Integer.toBinaryString(i));
i = i << 21;
System.out.println(Integer.toUnsignedString(i) + "=" + Integer.toBinaryString(i));
结果输出:
2096128=111111111110000000000 // 11 ones, 10 zeros
2047=11111111111 // 11 ones, 0 zeros
4292870144=11111111111000000000000000000000 // 11 ones, 21 zeros
我知道 java 没有 unsigned int,但是从 Java SE 8 开始,有一些方法可以使用整数数据类型来执行无符号算术。我如何着手在 java 中将位移位到 "unsigned int"?
您执行所有按位运算的方式与对有符号 int
执行的方式相同,使用 >>>
右移。 "Unsigned" 特征仅用于输出和转换,它们不影响内部位表示。
例如:
int i = Integer.MAX_VALUE / 1024 - 1023;
System.out.println(Integer.toUnsignedString(i) + "=" + Integer.toBinaryString(i));
i = i >>> 10;
System.out.println(Integer.toUnsignedString(i) + "=" + Integer.toBinaryString(i));
i = i << 21;
System.out.println(Integer.toUnsignedString(i) + "=" + Integer.toBinaryString(i));
结果输出:
2096128=111111111110000000000 // 11 ones, 10 zeros
2047=11111111111 // 11 ones, 0 zeros
4292870144=11111111111000000000000000000000 // 11 ones, 21 zeros