位运

位运算 属于 Java

3 个练习

关于 位运算

Java 提供了用于操作整数类型(byte、short、int、long或char)各个位的运算符。

移位运算符

使用<<可以将位向左移,使用>>可以将位向右移。

// Shift two places to the left
0b0000_1011 << 2;
// # => 0b0010_1100

// Shift two places to the right
0b0000_1011 >> 2;
// # => 0b0000_0010

>>也称为有符号移位或算术移位运算符,因为它插入的位与符号位相同。 这是最左边的位,值为正时是 0,为负时是 1。 使用<<向左移时,总是在右侧插入 0。

// Shift 2 places to the right preserves the sign
// The binary value is two's complement of 0b0000_0110 (or 0x00000026), so the binary representation will be
// 1000_0000_0000_0000_0000_0000_0010_0110
int value = -0x7FFFFFDA;

// Shift two places to the right, preserving the sign bit
value >> 2;
// # => 1110_0000_0000_0000_0000_0000_0000_1001

如果向右移时需要插入 0,则应改用>>>。移位时插入 0 也称为逻辑移位。

// Shift two places to the right, inserting 0s on the left
value >>> 2;
// # => 0010_0000_0000_0000_0000_0000_0000_1001

按位运算

按位与

按位与(&)运算符接受两个值,对每一位执行与运算。 它把第一个值的每一位与第二个值中相同位置的位进行比较。 如果两者都是 1,结果的该位就是 1。 否则,结果的该位是 0。

0b0110_0101 & 0b0011_1100;
// # => 0b0010_0100

按位或

按位或(|)运算符接受两个值,对每一位执行或运算。 它把第一个值的每一位与第二个值中相同位置的位进行比较。 只要其中一位是 1,结果的该位就是 1。 否则就是 0。

0b0110_0101 | 0b0011_1100;
// # => 0b0111_1101

按位异或

按位异或运算符(^)对两个值执行按位异或。 与按位与和按位或运算符一样,它把第一个值的每一位与第二个值中相同位置的位进行比较。 如果只有其中一位是 1,结果位就是 1。 否则就是 0。

0b0110_0101 ^ 0b0011_1100;
// # => 0b0101_1001

按位非(~)

最后,按位非运算符(~)会翻转每一位。 与前面的运算符不同,这是一元运算符,只作用于一个值。

~0b0110_0101;
// # => 0b1001_1010
通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 位运算