Java中二进制计算与&、或|、非~、异或^、左移<<、右移>>、无符号右移>>>

简介: Java中二进制计算与&、或|、非~、异或^、左移<<、右移>>、无符号右移>>>

1、&二进制与


2 & 3
0B10 & 0B11 => 0B10 => 2

2、|二进制或


2 | 3
0B10 & 0B11 => 0B11 => 3

3、~二进制非


~3
= ~ 0B00000000 00000000 00000000 00000011
= 0B11111111 11111111 11111111 11111100  
取反之后变成了负数是补码表示 需要求其原码:补码的补码等于原码
=> 0B10000000 00000000 00000000 00000011  反码
=> 0B10000000 00000000 00000000 00000100  反码+1取补码 
= -4

4、^二进制异或


2 ^ 3
0B10 ^ 0B11 => 0B01 => 1

5、<< 左移


3 << 4
0B11 << 4 => 0B110000 => 48
相当于 
3 * 2 ** 4 = 3 * 16 = 48

6、>> 二进制有符号右移


12 >> 2
0B1100 >> 2 => 0B0011 => 3
-12 >> 2 
= 0B10000000 00000000 00000000 00001100 原码
=> 0B11111111 11111111 11111111 11110011 反码
=> 0B11111111 11111111 11111111 11110100 补码
>> 2
= 0B11111111 11111111 11111111 11111101 原码
=>  0B10000000 00000000 00000000 00000010 反码
=>  0B10000000 00000000 00000000 00000011 补码
= -3

7、>>> 二进制无符号右移


>>>与>>唯一的不同是它无论原来的最左边是什么数,统统都用0填充。


12 >>> 2
0B1100 >>> 2 => 0B0011 => 3
-12 >>> 2
= 0B10000000 00000000 00000000 00001100 原码
=> 0B11111111 11111111 11111111 11110011 反码
=> 0B11111111 11111111 11111111 11110100 补码
>>> 2
= 0B0011111111 11111111 11111111 111101
= 1073741821

相关文章
|
24天前
|
Java
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
25 0
|
1月前
|
Java
Java中整数(负数)的二进制表示
Java中整数(负数)的二进制表示
|
1月前
|
存储 Java
Java:编写程序,计算两个数的和、差、积、商和余数。docx
Java:编写程序,计算两个数的和、差、积、商和余数。docx
|
1月前
|
算法 Java
算法:Java计算二叉树从根节点到叶子结点的最大路径和
算法:Java计算二叉树从根节点到叶子结点的最大路径和
|
1月前
|
存储 Java
Java 编程实例:相加数字、计算单词数、字符串反转、元素求和、矩形面积及奇偶判断
Java中相加两个数字可通过简单赋值实现,如`int sum = x + y;`。若要用户输入数字相加,可使用`Scanner`类读取。计算单词数,可使用`split()`方法或`StringTokenizer`类。反转字符串,可用`for`循环或`StringBuilder`的`reverse()`方法。计算数组元素总和,可遍历数组累加。矩形面积通过长度乘以宽度得出。判断奇偶性,利用模2运算或位运算检查最低位。更多内容,可关注微信公众号`Let us Coding`。
49 0
|
1月前
|
Java
Java中将一个数转化为二进制
Java中将一个数转化为二进制
25 0
|
1月前
|
Java
Java计算每个月的天数
Java计算每个月的天数
|
1月前
|
机器学习/深度学习 算法 Java
Java计算阶乘递归函数的实现
Java计算阶乘递归函数的实现
|
1月前
|
算法 Java 数据处理
Java:将一个数转化为二进制
Java:将一个数转化为二进制
|
1月前
|
Java
Java:计算两个数的最大公约数和最小公倍数
Java:计算两个数的最大公约数和最小公倍数