具有十进制值

时间:2018-02-17 17:31:33

标签: python python-3.x bitwise-xor

我对按位xor运算符的行为有点困惑。为什么,如果xor只能用二进制数据,我可以使用带有十进制数的xor吗?

例如:

fs='a'
sn='k'    
ord(fs) ^ ord(sn)

ord(fs)给我一个非二进制的ASCII码。

2 个答案:

答案 0 :(得分:1)

根据内置函数的Python 3 documentationord()返回一个整数:

  

给定表示一个Unicode字符的字符串,返回表示该字符的Unicode代码点的整数。例如,ord('a')返回整数97 [...]

此整数由位序列表示,因此它是按位XOR运算符的有效操作数。

修改

Python将值97解释为整数。并且,在内部,整数数字类型表示为位序列。 Numeric Types中描述了整数类型。该文档的另一部分解释了Bitwise Operations on Integer Types,并说明了

  

按位运算仅对整数有意义。

也就是说,任何其他类型的按位操作(包括字符串)在Python中都是无效的。

所以ord()返回一个整数。其中内部表示为位序列。虽然它的类型不是显式的“二进制”,但Python仍然为整数定义了按位XOR运算符。

要清楚,所有值都在内部表示为位序列。只是Python只为整数定义了按位XOR运算符。

答案 1 :(得分:0)

它完全按照设计工作,只需要将它分配给变量,然后打印它们。

您可以将它们(=整数)转换回二进制字符串,例如'{0:b}'.format(some_integer)。以下示例中的.zfill(8)是“零填充为8个字符”,以便将它们整齐地对齐。

示例:

fs='a' 
sn='k'

#assign result to variable
r = ord(fs) ^ ord(sn)

print('fs=', str(ord(fs)).rjust(3), '{0:b}'.format(ord(fs)).zfill(8))
print('sn=', str(ord(sn)).rjust(3), '{0:b}'.format(ord(sn)).zfill(8))
print('r =', str(r).rjust(3), '{0:b}'.format(r).zfill(8))

输出:

fs=  97 01100001
sn= 107 01101011
r =  10 00001010