带十进制值的Python xor二进制数据
我对按位异或运算符的行为有点困惑。为什么,如果xor只能用于二进制数据,那么我能够使用带有十进制数的xor呢 例如:带十进制值的Python xor二进制数据,python,python-3.x,bitwise-xor,Python,Python 3.x,Bitwise Xor,我对按位异或运算符的行为有点困惑。为什么,如果xor只能用于二进制数据,那么我能够使用带有十进制数的xor呢 例如: fs='a' sn='k' ord(fs) ^ ord(sn) ordfs给了我一个非二进制的ASCII码。根据Python 3的内置函数,ord返回一个整数: 给定一个表示一个Unicode字符的字符串,返回一个表示该字符的Unicode代码点的整数。例如,ord'a'返回整数97[…] 该整数由一个位序列表示,因此它是按位异或运算符的有效操作数 编辑 Python将
fs='a'
sn='k'
ord(fs) ^ ord(sn)
ordfs给了我一个非二进制的ASCII码。根据Python 3的内置函数,ord返回一个整数:
给定一个表示一个Unicode字符的字符串,返回一个表示该字符的Unicode代码点的整数。例如,ord'a'返回整数97[…]
该整数由一个位序列表示,因此它是按位异或运算符的有效操作数
编辑
Python将值97解释为整数。在内部,整数数字类型表示为一个位序列。整数类型如中所述。同一文档的另一部分对此进行了解释,并指出
按位运算只对整数有意义
也就是说,在Python中,对任何其他类型(包括字符串)的按位操作都是无效的
所以ord返回一个整数。它在内部表示为一个位序列。尽管它的类型不是显式的二进制,Python仍然为整数定义了按位异或运算符
为了清楚起见,所有值在内部都表示为一个位序列。只是Python只为整数定义了按位异或运算符。它的工作原理与设计完全一样,只是需要将其分配给变量,然后打印出来 您可以将它们=整数转换回类似于“{0:b}”的二进制字符串。下面示例中的.zfill8是将0填充到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
为什么你们认为ascii码不是二进制的呢?还是有点困惑,字符串是一个位序列,但在python中,若我键入97,那个么它是整数而不是位正确的?