原创

位运算符 —— & 与、| 或、~ 非、^ 异或 详细介绍

温馨提示:
本文最后更新于 2021年01月27日,已超过 524 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
1. & 与 运算符
两个操作数中位都为1,结果才为1,否则结果为0

2. | 或 运算符
两个操作数中有一个为1,结果就为1

3. ~ 非 运算符
在计算机内是以二进制进行存储的,计算机在存储某个数据时,是存储的数据的补码。


~ (-2) 结果为1
step1 -> -2原码:
1000 0000 0000 0000 0000 0000 0000 0010
step2 -> -2反码:
1111 1111 1111 1111 1111 1111 1111 1101
step3 -> -2补码:
1111 1111 1111 1111 1111 1111 1111 1110
step4 -> 对-2的补码进行取反即可得到~(-2)的补码
step5 -> ~(-2)补码:
0000 0000 0000 0000 0000 0000 0000 0001
step6 -> 由于符号位为0表示正数,因此补码和原码一样。转换为十进制就是1


~37 结果为 -38

原码:
00000000 00000000 00000000 00100101
反码:
00000000 00000000 00000000 00100101

补码:
00000000 00000000 00000000 00100101

取反:
11111111 11111111 11111111 11011010
可知这个是个负数
负数用补码表示,这个已经是补码了
即已知道补码,求原码:
反码=补码-1
11111111 11111111 11111111 11011001
取原码:
10000000 00000000 00000000 00100110
即38
4. ^ 异或 运算符

相同 则为 0,不相同 则为1。

所以 a^a = 0, a^0 = a

而且遵循交换律。


同值取0,异值取1

1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑
=
0 1 0 1
即 5

比如
19^1

0001 0011 0000 0001
=
0001 0010
即 18

正文到此结束
关注公众号 【HelloCoder】
免费领取Java学习资料
让技术,化繁为简
本文目录