Java中的位运算符全解
目录
- 1.&(按位与运算符)
- 2.|(按位或运算符)
- 3.^(异或运算符)
- 4.<<(左移运算符)
- 5.>>(右移移运算符)
- 6.~(取反运算符)
- 7.>>>(无符号右移运算符)
- (1)正数无符号右移
- (2)负数无符号右移
- 总结
1. &(按位与运算符)
&
按位与的运算规则是将两边的数转换为二进制位,然后运算最终值,运算规则即(两个为真才为真):1&1=1 , 1&0=0 , 0&1=0 , 0&0=0
public class Main {public static void main(String[] args) {// &按位与,运算符两边的条件值会先转换为2进制,然后再比对运算/***0 0 1 1*0 1 0 1*----------- *0 0 0 1*/int a = 3&5; /***0 0 0 1*0 0 1 0*----------- *0 0 0 0*/int b = 1&2; System.out.println(a); // 1System.out.println(b); // 0}}
2. |(按位或运算符)
|
按位或和&
按位与计算方式都是转换二进制再计算,不同的是运算规则(一个为真即为真):1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1
public class Main {public static void main(String[] args) {// |按位或,运算符两边的条件值会先转换为2进制,然后再比对运算/***0 0 1 1*0 1 0 1*-------------*0 1 1 1*/int a = 3|5; /***0 0 0 1*0 0 1 0*-------------*0 0 1 1*/int b = 1|2; System.out.println(a); // 7System.out.println(b); // 3}}
3. ^(异或运算符)
^
异或运算符顾名思义,异就是不同,其运算规则为1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0
public class Main {public static void main(String[] args) {/***0 0 1 1*0 1 0 1*-------------*0 1 1 0*/int a = 3^5; /***0 0 0 1*0 0 1 0*-------------*0 0 1 1*/int b = 1^2; System.out.println(a); // 6System.out.println(b); // 3}}
4. <<(左移运算符) 5<<2的意思为5的二进制位往左挪两位,右边补0
5的二进制位是
0000 0101
, 就是把有效值101往左挪两位就是0001 0100
,正数左边第一位补0,负数补1,等于乘于2的n次方,十进制位是5*2^2=20
public class Main {public static void main(String[] args) {/*** 5<<2的意思为5的二进制位往左挪两位,右边补0*0 0 0 0 0 1 0 1*0 0 0 1 0 1 0 0*/System.out.println(5<<2); // 20}}
5. >> (右移移运算符) 凡位运算符都是把值先转换成二进制再进行后续的处理
5的二进制位是0000 0101,右移两位就是把101左移后为0000 0001,正数左边第一位补0,负数补1,等于除于2的n次方,结果为1
public class Main {public static void main(String[] args) {/*** 5>>2的意思为5的二进制位往右挪两位,左边补0*0 0 0 0 0 1 0 1*0 0 0 0 0 0 0 1*/System.out.println(5<<2); // 1}}
6. ~(取反运算符) 取反就是1为0,0为1
5的二进制位是0000 0101,取反后为1111 1010,值为-6
public class Main {public static void main(String[] args) {/***0 0 0 0 0 1 0 1*---------------------*1 1 1 1 1 0 1 0**1、如果 11111010 想转为负的十进制,因为最高位是1,所以先将11111001减1得到11111001*2、取反 00010101,然后计算出 00000100 对应的十进制为6*3、所以 11111010 最终对应的十进制为 -6**1 1 1 1 1 0 1 0*- 0 0 0 0 0 0 0 1*---------------------*1 1 1 1 1 0 0 1*---------------------*0 0 0 0 0 1 0 0*/System.out.println(~5); // -6}}
【Java中的位运算符全解】
7. >>>(无符号右移运算符)
(1) 正数无符号右移
无符号右移运算符和右移运算符的主要区别在于负数的计算,因为无符号右移是高位补0,移多少位补多少个0。
15的二进制位是0000 1111 , 右移2位0000 0011,结果为3
public class Main {public static void main(String[] args) {/***0000 1111*--------------- *0000 0011*/System.out.println(15>>>2); // 3}}
(2) 负数无符号右移
-6的二进制是6的二进制取反再加1,6的二进制也就是0000 0000 0000 0000 0000 0000 0000 0110,取反后加1为1111 1111 1111 1111 1111 1111 1111 1010,右移三位0001 1111 1111 1111 1111 1111 1111 1111
public class Main {public static void main(String[] args) {System.out.println(-6>>>3); // 536870911}}
总结 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- Java 1.8的HashMap为什么改用尾插法
- Java刷题时常用的标准库数据结构和相应算法
- Java基础——选择语句
- Microsoft Office word 2019教程 - word中的excel表格随着excel表格的变化而变化
- Java笔记——循环语句
- PyTorch|PyTorch 中的乘法(mul()、multiply()、matmul()、mm()、mv()、dot())
- 算法初探|八大经典排序算法(java)
- 排序算法|Java实现十大经典排序算法--上
- 带你了解Java数据结构和算法之前缀|带你了解Java数据结构和算法之前缀,中缀和后缀表达式
- Java数据结构的十大排序