XOR 与非二进制数字有什么作用?
what does XOR with non-binary numbers do?
例如,
0^1
将 return 1
和
1^1
将 return 0
这对于翻转位有明显的用途。
不过,我见过异或的应用,比如
55^4
或 73^1
我不明白这样做的目的是什么。不就是检查55和73分别不等于4和1吗?
它会先将两个数字转换为二进制数,然后对所有位进行按位异或
55 -> 110111
4 -> 000100
Xor-> 110011 ->which is equal to decimal 51.
很多时候,如果您有 a^b
,a
中的信息会以特定位编码。您可以使用位模式进行 XOR,以有用的方式修改此信息。这基本上是一个 位掩码(维基百科文章 here)。
例如,假设您有一些表示用户权限的无符号 32 位整数。每个位对应一个特定的权限。假设第 3 个最低有效位(右起第 3 个)表示用户是否是管理员。然后切换用户是否是管理员,你可以这样做:
userRoles = userRoles ^ 0b100
或等同于
userRoles = userRoles ^ 8
例如,
0^1
将 return 1
和
1^1
将 return 0
这对于翻转位有明显的用途。
不过,我见过异或的应用,比如
55^4
或 73^1
我不明白这样做的目的是什么。不就是检查55和73分别不等于4和1吗?
它会先将两个数字转换为二进制数,然后对所有位进行按位异或
55 -> 110111
4 -> 000100
Xor-> 110011 ->which is equal to decimal 51.
很多时候,如果您有 a^b
,a
中的信息会以特定位编码。您可以使用位模式进行 XOR,以有用的方式修改此信息。这基本上是一个 位掩码(维基百科文章 here)。
例如,假设您有一些表示用户权限的无符号 32 位整数。每个位对应一个特定的权限。假设第 3 个最低有效位(右起第 3 个)表示用户是否是管理员。然后切换用户是否是管理员,你可以这样做:
userRoles = userRoles ^ 0b100
或等同于
userRoles = userRoles ^ 8