位运算
概述
- 位运算的使用场景比较多,这里就简单介绍一下位运算,这里就通过C语言(Java语言也一样)介绍一下位运算。
- 按位与:
- 1 & 1 = 1
- 1 & 0 = 0
- 0 & 0 = 0
- 按位或:
- 1 | 1 = 1
- 1 | 0 = 1
- 0 | 0 = 0
C语言
左移
#include <stdio.h> int main() { int num = 1; num = num << 1; printf("%d",num); // 这里控制台输出是:2 return 0; } // ----------------------- 内容解释 ------------------------------------- // 这里就解释一下:int类型是4字节,每个字节由8比特组成,也就是int类型有32比特。 int num = 1;// 可以理解为(转为二进制):int num = 0000 0000 0000 0000 0000 0000 0000 0001; // << 表示所有比特都向左移动。<< 1 表示左移1个比特。 num = num << 1;// num = 0000 0000 0000 0000 0000 0000 0000 0010; // 0000 0000 0000 0000 0000 0000 0000 0010 转成 十进制后就是 2。 printf("%d",num);
右移
#include <stdio.h> int main() { // 注意:这里int num = 2; 是十进制的2 int num = 2; num = num >> 1; printf("%d",num); // 这里打印输出是:1 return 0; }
按位或
#include <stdio.h> int main() { // 如果想将32个比特中的某一位数字变成0或者1,则可以这样操作。 int num = 1; // 这里将第二个比特位变成1(从右边数起) num = num | 2; printf("%d",num); // 这里输出的是:3 ,也就是 0000 0000 0000 0000 0000 0000 0000 0011 } // --------- 第二种方法 ---------- #include <stdio.h> int main() { // 如果想将32个比特中的某一位数字变成0或者1,则可以这样操作。 int num = 1; // 这里将第二个比特位变成1(从右边数起) // 这里也可以是:num = num | 0x2; // 这里还可以是:num = num | ((0x1) << 1); num = num | 0x00000002;// 0x:十六进制,每个数字代表4个比特,这里的2:0010 printf("%d",num); // 这里输出的是:3 ,也就是 0000 0000 0000 0000 0000 0000 0000 0011 } // --------- 第二种方法的简写 ---------- #include <stdio.h> int main() { // 如果想将32个比特中的某一位数字变成0或者1,则可以这样操作。 int num = 1; // 这里将第二个比特位变成1(从右边数起) num |= ((0x1) << 1); printf("%d",num); // 这里输出的是:3 ,也就是 0000 0000 0000 0000 0000 0000 0000 0011 }
按位与
#include <stdio.h> int main() { // 3转成二进制:11 int num = 3; // 11 & 01 = 01 num = num & 1; printf("%d",num); // 这里输出的是:1 } // --------- 换成比较大的数 ---------- #include <stdio.h> int main() { // 31转成而进制后是 11111 int num = 31; // 将中间那个1转成0 // 27转成二进制后是 11011 num = num & 27; printf("%d",num); // 这里输出的是:27 } // --------- 其他形式 ---------- #include <stdio.h> int main() { // 31转成而进制后是 11111 int num = 31; // 将中间那个1转成0 // 27转成二进制后是 11011 // 其实右边的 27可以是:~4 也可以是 ~(1 << 2) num &= 27; // num &= ~4; // num & = ~(1 << 2); printf("%d",num); // 这里输出的是:27 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?