我正在实现从RGB到Yxy颜色的转换,伪代码指导我对两个浮点变量执行XOR(^)操作。我怎么能在python中做到这一点?我收到这个错误:
^:'float'和'float'
的不支持的操作数类型答案 0 :(得分:4)
没有内置支持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原生支持
在开始解决这个问题之前,我应该已经看过你的伪代码了。伪代码中的插入符^
是幂而不是xor,并且在python中通过**
或math.pow
答案 1 :(得分:0)
import struct, math
def fxor(a, b):
rtrn = []
a = struct.pack('d', a)
b = struct.pack('d', b)
for ba, bb in zip(a, b):
rtrn.append(ba ^ bb)
return struct.unpack('d', bytes(rtrn))[0]
print(fxor(math.pi, math.pi)) #0.0
print(fxor(math.e, math.pi)) #1.7551491316820714e-308
print(fxor(math.pi, 0)) #3.141592653589793
64-bit float
xor
。这会对组成浮点的每个位执行xor
操作,并将其返回为double
和/或64-bit float
答案 2 :(得分:-1)
您只能将位运算符应用于整数。所以首先将浮点数转换为整数。