易百教程

按位运算符

按位运算符对整数值的位进行操作。有六个按位运算符,如下表所示。

运算符 描述
& 按位AND运算符
Ι 按位OR运算符
^ 按位异或(XOR)运算符
~ 按位NOT运算符,也称为1的补码运算符
>> 按位右移运算符
<< 按位向左移位运算符

所有按位运算符仅适用于整数类型。
~运算符是一元运算符 - 它适用于一个操作数 - 其他运算符是二元运算符。
按位AND运算符&,组合其操作数的相应位,使得如果两个位均为1,则结果位为1; 否则,结果位为0

假设声明以下变量:

int x = 13;
int y = 6;
int z = x & y;  // x和y的与运算相应位

z的值为4(二进制100)。 这是因为xy中的相应位组合如下:

x 0 0 0 0 1 1 0 1
y 0 0 0 0 0 1 1 1
x & y 0 0 0 0 0 1 0 0

如果相应位中的任何一个或两个都是1,则按位OR运算符|,结果为1; 否则,结果为0

如果使用|组合相同的xy值,运算符在如下的语句中:

int z = x | y; // OR the bits of x and y

结果如下:

x 0 0 0 0 1 1 0 1
y 0 0 0 0 0 1 1 0
x Ι y 0 0 0 0 1 1 1 1

因此,存储在z中的值将是15(二进制表示为1111)。

如果两个位都不同,则按位XOR运算符^生成1,如果它们相同则生成0

int z = x ^ y;  // 异或x和y的位

这导致z包含值11(二进制值为1011),因为这些位组合如下:

x 0 0 0 0 1 1 0 1
y 0 0 0 0 0 1 1 0
x ^ y 0 0 0 0 1 0 1 1

一元运算符~翻转其操作数的位,因此1变为00变为1
可以将此运算符应用于值为13x变量:

int z = ~x;  // 存储1的x补码

执行此语句后,z将具有值14。这些位设置如下:

x 0 0 0 0 1 1 0 1
~x 1 1 1 1 0 0 1 0