Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带十进制值的Python xor二进制数据_Python_Python 3.x_Bitwise Xor - Fatal编程技术网

带十进制值的Python 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将

我对按位异或运算符的行为有点困惑。为什么,如果xor只能用于二进制数据,那么我能够使用带有十进制数的xor呢

例如:

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,那个么它是整数而不是位正确的?