位运算的简单使用

概述

  • 位运算的使用场景比较多,这里就简单介绍一下位运算,这里就通过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

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值