让我们考虑2位数字:00 = 00 ^ 00 (0 -> 0)

01 = 01 ^ 00 (1 -> 1)

11 = 10 ^ 01 (2 -> 3)

10 = 11 ^ 01 (3 -> 2)

如果y[i]是第i位(小尾数),则从y = x ^ (x >> 1)开始:y[1]y[0] = x[1]x[0] ^ 0x[1] # note: y[1]y[0] means `(y[1] << 1) | y[0]` here

意思是:y[1] = x[1] ^ 0

y[0] = x[0] ^ x[1]

如果我们知道y,那么要得到x:y[i] = (y & ( 1 << i )) >> i

x[1] = y[1] ^ 0

x[0] = y[0] ^ x[1] = y[0] ^ (y[1] ^ 0)

x = (x[1] << 1) | x[0]

可以对n位数进行泛化:def getbit(x, i):

return (x >> i) & 1

def y2x(y):

assert y >= 0

xbits = [0] * (y.bit_length() + 1)

for i in range(len(xbits) - 2, -1, -1):

xbits[i] = getbit(y, i) ^ xbits[i + 1]

x = 0

for i, bit in enumerate(xbits):

x |= (bit << i)

return x

y2x()可以简化为使用不带位数组的数字:def y2x(y):

assert y >= 0

x = 0

for i in range(y.bit_length() - 1, -1, -1):

if getbit(y, i) ^ getbit(x, i + 1):

x |= (1 << i) # set i-th bit

return x

示例print("Dec Gray Binary")

for x in range(8):

y = x ^ (x >> 1)

print("{x: ^3} {y:03b} {x:03b}".format(x=x, y=y))

assert x == y2x(y)

输出Dec Gray Binary

0 000 000

1 001 001

2 011 010

3 010 011

4 110 100

5 111 101

6 101 110

7 100 111

python中的异或操作_Python中的异或和位操作的反转相关推荐

  1. 计算机中异或操作计算什么意思,异或操作

    在各种计算机语言中,如C.C++.java等,使用按位异或的思想执行的操作.异或逻辑的关系是:当AB不同时,输出P=1:当AB相同时,输出P=0."⊕"是异或数学运算符号,异或逻辑 ...

  2. python同或与异或_python中 “与,或,异或”与C语言的不同

    在python中: 按位的运算,都按位的运算,都是把参加运算的数的二进制形式进行运算. 1.与运算:A与B值均为1时,A.B与的运算结果才为1,否则为0 (运算符:&) 2.或运算:A或B值为 ...

  3. python中函数的作用域_Python中的函数作用域

    在python中,一个函数就是一个作用域 name = 'xiaoyafei' def change_name(): name = '肖亚飞' print('在change_name里的name:', ...

  4. python列表怎么写文件_python中以字典为元素的列表怎么写入文本文件

    python如何将列表中的元素添加进字典纵然被命运的铁蹄狠狠践踏,也顽强地长出自己的根芽. 录入自己和另一个人的名字的汉语拼音简写,然后依据标识符中字母的数值两个人,一颗心,依偎的不是爱情而是那小温暖 ...

  5. python中赋值语句的作用_python中return可以使用赋值语句吗?

    在python中,有各种不同类型的语句.一个python程序是由模块构成的;一个模块由一条或多条语句组成;每个语句由不同的表达式组成;表达式可以创建和操作对象.下面来看看python中的语句. 赋值语 ...

  6. python中round函数参数_python中关于round函数的小坑

    round函数很简单,对浮点数进行近似取值,保留几位小数.比如 >>> round(10.0/3, 2) 3.33 >>> round(20/7) 3 第一个参数是 ...

  7. python里的join方法_python中join()方法介绍

    描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str . join ( sequence ) 参数 sequence -- ...

  8. python常用函数的用法_python中常用函数整理

    1.map map是python内置的高阶函数,它接收一个函数和一个列表,函数依次作用在列表的每个元素上,返回一个可迭代map对象. class map(object):""&qu ...

  9. python中反斜杠_Python中的正斜杠/与反斜杠\

    知识点: 1. "/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠 2. 对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠\. ...

最新文章

  1. PHP气缸种类,气缸分类方法有哪些及气缸的种类
  2. C# Azure 存储-分布式缓存Redis的新建配置查看
  3. sxssfworkbook设置单元格格式_用好条件格式,实现数据可视化,尤其是第8个技巧!...
  4. 10.原码 反码 补码
  5. 如何把VS Code打造成Java开发IDE?
  6. async 和 await 的进阶
  7. oracle11g ogg报价,Oracle11g GoldenGate配置错误OGG-00868 Attaching to ASM server
  8. unity 角度限制_喵的Unity游戏开发之路 推球:游戏中的物理
  9. C#.NET 大型通用信息化系统集成快速开发平台 4.6 版本 - SSO单点登录接口
  10. 以太网的分层架构_以太网矩阵(Ethernet Fabric)简介
  11. 上次遗留下来的XMLUtil的问题
  12. 抖音怎么加微信好友?抖音跳转微信的方法
  13. powerdesigner中把用例关系线设置成直线
  14. Unity学习笔记(4)-----粒子效果的实现
  15. DPDKVPP关键技术文档总结
  16. 云时代下主机安全防护建设,用RS-CDPS就够了
  17. vue项目获取下拉框选中id_vue获取下拉框值
  18. Java编程那些事儿74——java.lang包介绍1
  19. 5月英语——热情还是坚持?
  20. STM32F103做主控自制无刷电机(BLDC)控制器 有感/无感

热门文章

  1. [HAOI2009]毛毛虫 dfs
  2. 2017.9.15 最大数maxnumber 思考记录
  3. azure kinect三维点云_【干货】三维重建技术综述
  4. 【人生杂谈】宇宙/暗物质/擎天柱
  5. python初始化函数_当你学会了Python爬虫,网上的图片素材就开始免费了
  6. 利用GDB进行远程调试
  7. pytorch 实现MLP(多层感知机)
  8. 用html编写勾股定理,一种勾股定理演示器的制作方法
  9. Hive的伴奏_Position Music顶级背景音乐合集243CD
  10. Java中各种对象的各种实例化方式