位运算符 —— & 与、| 或、~ 非、^ 异或 详细介绍
温馨提示:
本文最后更新于 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
正文到此结束