一、位运算基础操作
(一)按位与(&)
按位与(&)操作是对两个二进制数的每一位进行逻辑与(&)运算。规则是:只有当两个对应位都为 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
三、总结
位运算作为计算机底层的重要操作,为我们提供了一种直接操作二进制数据的高效方式。虽然位运算在日常应用开发中可能不常见,但在系统编程、算法优化、数据处理等领域,它是不可或缺的强大工具。