- 按位取反 ~ 0变1 1变1
void test01() { int num = 2; printf("~num = %d\n", ~num); // -很大 -2 253 1 -很小 +很大 -3 // 010 按位取反 101 源码 // 101 补码 110 + 1 = 111 }
- 按位与 & 全1为1 一0为0
void test02() { int num = 124; if ((num & 1) == 0) { printf("num为偶数\n"); } else { printf("num为奇数\n"); } }
- 按位或 | 全0为0 一1为1
void test03() { int num1 = 5; int num2 = 3; printf("num1 | num2 = %d\n", num1 | num2); // 7 }
- 按位异或 ^ 相同为0 不同为1
void test04() { int num1 = 10; int num2 = 20; printf("num1 = %d\n", num1); printf("num2 = %d\n", num2); //int temp = num1; //num1 = num2; //num2 = temp; //利用按位异或实现两个数的交换 num1 = num1 ^ num2; num2 = num1 ^ num2; num1 = num1 ^ num2; //不用临时数字实现两个变量交换 //num1 = num1 + num2; //num2 = num1 - num2; //num1 = num1 - num2; printf("交换后\n"); printf("num1 = %d\n", num1); printf("num2 = %d\n", num2); }
- 左移 <<
- << X 等价于 乘以 2的X次方 ,用0填充位
void test05() { int num = 10; printf("%d\n", num <<= 2); }
- << X 等价于 乘以 2的X次方 ,用0填充位
- 右移 >>
- >> X 等价与 除以 2的X次方 ,如果有符号,不同的机器可能有不同的结果
void test06() { int num = 10; printf("%d\n", num >>= 1); }
- >> X 等价与 除以 2的X次方 ,如果有符号,不同的机器可能有不同的结果
位运算&移位运算
最新推荐文章于 2024-08-29 07:41:07 发布