位运算
- 按位取反:~
void test0901() {
int num = 2;
printf("~num=%d\n", ~num);//输出-3,原码+反码+1=0
}
- 按位与:&
全真为真,一假为假
void test0902() {
int num = 123;
if ((num & 1) == 1) {
printf("num为奇数\n");
}
else
{
printf("num为偶数\n");
}
}
- 按位或:|
全假为假,一真为真
void test0903() {
int num1 = 5;//0101
int num2 = 3;//0011
printf("num1|num2=%d\n", num1 | num2);//输出7(0111)
}
- 按位异或:^
相同为假,不同为真
void test0904() {
int num1 = 5;
int num2 = 9;
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
printf("num1=%d,num2=%d", num1, num2);
}
位移运算
- 左移:<<
- 右移:>>
部分机器高位补0,部分机器高位补符号位,无符号数高位统一补0
java中右移运算符包括>>,>>>
>>:算数右移,高位补符号位
>>>:逻辑右移,高位补0
void test0905() {
int num = 20;
printf("num<<2=%d\n", num << 2);//输出80
printf("num>>2=%d\n", num >> 2);//输出5
}