欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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表示二进制

参考

  1. java中位运算^,&,<<,>>,<<<,>>>总结

本文地址:https://blog.csdn.net/mouday/article/details/107354500