Java中二进制计算与&、或|、非~、异或^、左移<<、右移>>、无符号右移>>>
程序员文章站
2022-07-10 21:02:39
1、&二进制与2 & 30B10 & 0B11 => 0B10 => 22、|二进制或2 | 30B10 & 0B11 => 0B11 => 33、~二进制非~3= ~ 0B00000000 00000000 00000000 00000011= 0B11111111 11111111 11111111 11111100 取反之后变成了负数是补码表示 需要求其原码:补码的补码等于原码=> 0B10000000 0...
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
备注 :
0B
表示二进制
参考
本文地址:https://blog.csdn.net/mouday/article/details/107354500
上一篇: 转职做web前端,一开始别走弯了!