Java中二进制计算与&、或|、非~、异或^、左移<<、右移>>、无符号右移>>>
【摘要】 1、&二进制与
2 & 3
0B10 & 0B11 => 0B10 => 2
123
2、|二进制或
2 | 3
0B10 & 0B11 => 0B11 => 3
123
3、~二进制非
~3
= ~ 0B00000000 00000000 00000000 00000011
= 0B11111111...
1、&
二进制与
2 & 3
0B10 & 0B11 => 0B10 => 2
- 1
- 2
- 3
2、|
二进制或
2 | 3
0B10 & 0B11 => 0B11 => 3
- 1
- 2
- 3
3、~
二进制非
~3
= ~ 0B00000000 00000000 00000000 00000011
= 0B11111111 11111111 11111111 11111100
取反之后变成了负数是补码表示 需要求其原码:补码的补码等于原码
=> 0B10000000 00000000 00000000 00000011 反码
=> 0B10000000 00000000 00000000 00000100 反码+1取补码
= -4
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
4、^
二进制异或
2 ^ 3
0B10 ^ 0B11 => 0B01 => 1
- 1
- 2
- 3
5、<<
左移
3 << 4
0B11 << 4 => 0B110000 => 48
相当于
3 * 2 ** 4 = 3 * 16 = 48
- 1
- 2
- 3
- 4
- 5
- 6
- 7
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
备注 :
0B
表示二进制
参考
文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。
原文链接:pengshiyu.blog.csdn.net/article/details/107354500
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)