深入理解位运算

一、位运算基础操作

(一)按位与(&)

        按位与(&)操作是对两个二进制数的每一位进行逻辑与(&)运算。规则是:只有当两个对应位都为 1 时,结果位才为 1,否则为 0。执行按位与(&)操作:

  0101
& 0011
------
  0001

(二)按位或(|)

        按位或(|)操作对两个二进制数的每一位进行逻辑或(|)运算。规则是:只要两个对应位中有一个为 1,结果位就为 1,只有当两个对应位都为 0 时,结果位为 0。)执行按位或(|)操作:

  0101
| 0011
------
  0111

(三)按位异或(^)

按位异或(^)操作对两个二进制数的每一位进行异或(^)运算。规则是:当两个对应位不同时,结果位为 1,相同时为 0。执行按位异或(^)操作:

  0101
^ 0011
------
  0110

(四)左移(<<)

        左移操作将一个二进制数向左移动指定的位数。相当于将数扩大为原来的2^n倍。

0101 << 2     // 5
-----------
10100         // 20=5*2^2

(五)右移(>>)

        右移操作将一个二进制数向右移动指定的位数。相当于将数缩小为原来的2^n倍。

0100 >> 1          // 4
----------
0010               // 2=4/2^1

二、位运算的应用场景

(一)按位与(&)运算

判断数的奇偶性

int n = 10;
String str = (n & 1) == 1?"奇数":"偶数";
ystem.out.println(str);

运行结果:
偶数

(二)按位或(|)运算

系统权限管理

0001 读权限
0010 写权限
读写权限:
  0001
| 0011
------
  0011

(三)按位异或(^)运算

交换两个数的值

^的性质:
1、两个相同的数进行^时结果为:0
2、一个数与0进行^时结果为:数字本身
3、满足交换律:a^c^b=a^b^c


int n = 10,m =12;
System.out.printf("交换前n-->%d,m-->%d\n",n,m);
n=n^m;
m=n^m;
n=n^m;
System.out.printf("交换后n-->%d,m-->%d",n,m);

//运行结果
交换前n-->10,m-->12
交换后n-->12,m-->10

三、总结

        位运算作为计算机底层的重要操作,为我们提供了一种直接操作二进制数据的高效方式。虽然位运算在日常应用开发中可能不常见,但在系统编程、算法优化、数据处理等领域,它是不可或缺的强大工具。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joker—H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值