python中浮点数之间的异或

python中浮点数之间的异或,python,xor,Python,Xor,我正在实现从RGB到Yxy颜色的转换,伪代码指导我对两个浮点变量执行XOR(^)操作。如何在python中实现这一点?我得到这个错误: 不支持的操作数类型为^:“float”和“float” 看看这个伪代码:。您只能对整数应用位运算符。因此,首先将浮点数转换为整数。没有内置的对xoring浮点数的支持。相反,您必须使用struct模块实现一个 >>> from struct import pack, unpack >>> def xor_float(f1, f

我正在实现从RGB到Yxy颜色的转换,伪代码指导我对两个浮点变量执行XOR(^)操作。如何在python中实现这一点?我得到这个错误:

不支持的操作数类型为^:“float”和“float”


看看这个伪代码:。

您只能对整数应用位运算符。因此,首先将浮点数转换为整数。

没有内置的对xoring浮点数的支持。相反,您必须使用
struct
模块实现一个

>>> from struct import pack, unpack
>>> def xor_float(f1, f2):
    f1 = int(''.join(hex(ord(e))[2:] for e in struct.pack('d',f1)),16)
    f2 = int(''.join(hex(ord(e))[2:] for e in struct.pack('d',f2)),16)
    xor = f1 ^ f2
    xor = "{:016x}".format(xor)
    xor = ''.join(chr(int(xor[i:i+2],16)) for i in range(0,len(xor),2))
    return struct.unpack('d',xor)[0]

>>> xor_float(10.25,10.25)
0.0
>>> xor_float(10.25,0.00)
10.25
注意本例假设浮点数是64位浮点数,这是Python本机支持的


在开始解决这个问题之前,我应该先看看你的伪代码。伪代码中的插入符号
^
是幂而不是异或,在python中,通过
**
math.pow

import struct,math将数字提升为幂(包括浮点)
def fxor(a,b):
rtrn=[]
a=结构包('d',a)
b=结构包('d',b)
对于拉链中的ba、bb(a、b):
rtrn.append(ba^bb)
返回结构解包('d',字节(rtrn))[0]
打印(fxor(math.pi,math.pi))#0.0
打印(fxor(math.e,math.pi))#1.7551491316820714e-308
打印(fxor(math.pi,0))#3.141592653589793

64位浮点
xor
。这将对构成浮点的每个位执行一个异或操作,并将其作为双精度和/或64位浮点返回。您知道异或在语义上应该实现什么吗?请在您的帖子中链接或包含该指南。您可以显示伪代码吗?也许它不是XOR,而是指数(在某些语言中是
^
字符)?也许有另一种方法来做你需要的事情,除了XORDo,你指的是CIE XYZ颜色空间的RGB?XORing浮点值没有意义,你能给我们看一下伪代码吗?只需编辑您的问题并添加它。请更新您的问题,或者删除它,因为您已经引导我们进行了一场白费力气的追逐。这将导致丢失信息(并从XOR得到错误的结果),因为浮点上的int()强制转换总是整数part@SamueleMattiuzzo如果这是重点,只需使用
round(数字、数字)
@whatyouhide,这是您将获得另一个浮点值的地方,不适合再次使用XOR。如果您处理RGB图像,每个通道的值通常为0..255,但有些库将它们表示为0.0…1.0。也许通过
int_value=int(舍入(255*float_value))
@SamueleMattiuzzo
int(舍入(数字))
转换为int会舍入到下一个整数。我不知道这是否对任何人都有帮助,但有理由使用异或浮点,这是一种非常简单的方法。然而,在伪代码中,
^
表示指数。并不是每种语言都围绕python。。。