位运算

概述

  • 位运算的使用场景比较多,这里就简单介绍一下位运算,这里就通过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
}
posted @   wbnyua  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示