一、按位与(&)
定义:按位与操作将两个操作数的每个位进行比较。如果两个相应的位都为1,那么结果中对应位就为1,否则为0。
e.g.
int a = 60; // 60 = 0011 1100
int b = 13; // 13 = 0000 1101
int c = a & b; // c = 0000 1100 = 12
二、按位或(|)
定义:按位或操作将两个操作数的每个位进行比较。如果两个相应的位中有一个为1,那么结果中对应位就为1,否则为0。
e.g.
int a = 60; // 60 = 0011 1100
int b = 13; // 13 = 0000 1101
int c = a | b; // c = 0011 1101 = 61
三、按位异或(^)
按位异或操作将两个操作数的每个位进行比较。如果两个相应的位中有一个为1且另一个为0,那么结果中对应位就为1,否则为0。
e.g.
int a = 60; // 60 = 0011 1100
int b = 13; // 13 = 0000 1101
int c = a ^ b; // c = 0011 0001 = 49
四、按位取反(~)
按位取反操作将每个位的值反转。也就是说,如果一位是0,它就变为1,如果一位是1,它就变为0。
e.g.
int a = 60; // 60 = 0011 1100
int c = ~a; // c = 1100 0011 = -61 (假设int为2字节)
五、左移(<<)和右移(>>)
这两个操作可以移动位。左移操可以将一个数的所有二进制位向左移动指定的位数,右边移动则向右移动。左移操作将所有位向左移动若干位,右侧空出的位用0填充。右移操作将所有位向右移动若干位,左侧空出的位用符号位的值填充。对于有符号整数,其填充值是符号位的值;对于无符号整数,其填充值总是0。
e.g.
int a = 6; // 6 = 0000 0110
int b = a << 2; // b = 0001 1000 = 8 (左移2位)
int c = a >> 2; // c = 0000 0110 = -8 (右移2位) (假设int为2字节)