python - 单个值的按位异或校验和?
问题描述
我正在对数组进行按位校验和。
0^1^2^3^4^6 == 2.
17^18^19^20^21^22^23^25^26^29 == 14.
12^ == ?
但是有时可能只有一个值。
单个值的数组校验和等效于什么?
解决方案
摘要:X^0 == X
对于 any X
,这就是 12 的结果等于 12 的原因12^0
。
我在数学上并不精确,但对于一个操作,可能存在一个“中性”值什么都不做:
- 另外它是0:
X+0 == X
- 对于乘法,它是 1:
X*1 == X
- 对于 AND(逻辑,按位),它是
True
或位值 1
等等
您始终可以插入中性值而不更改结果。sum(alist)
这意味着例如,一个空的数字列表的总和为 0,乘积为 1。您自然会将该值用作orproduct(alist)
实现中的起点:
total = 0; for x in alist: total = total + x
prod = 1; for x in alist: prod = prod * x
回到您的问题,XOR 的中性值为 0。我们将 xor 写为:
def xor(*args):
result = 0
for x in args:
result ^= x
return result
接着:
>>> xor(17,18,19,20,21,22,23,25,26,29)
14
>>> xor(0,1,2,3,4,6)
2
>>> xor()
0
>>> xor(12)
12
推荐阅读
- python - python:我如何压缩两个数组
- java - 如何让while循环正常工作?
- reactjs - Lerna monorepo 与加载打字稿文件的 Webpack 问题
- google-apps-script - 来自 Google 表格 | HTTP 请求 API 以传递已编辑的单元格过去和新值
- c++ - 如何在 C++ 中访问向量中的数组元素?
- css - CSS 未按预期呈现
- android - 尝试在 Android 和 Retrofit2 中发送推送通知的发布请求时,从 Firebase 云数据库收到 400 个错误请求
- postgresql - 在 Postgres 表上找到最终值更改发生的记录?
- git - 如何仅更改 git 子模块的名称,使其路径保持不变?
- javascript - 从重新加载控制台停止获取功能