Python中的>>>运算符
ActionScript和JavaScript都支持一种叫做'>>>'的操作符。我正在用Python把一个关于base64编码和解码的ActionScript代码转换过来。我知道base64在Python中是可以用的,这只是为了学习。Python没有“...”这个操作符。
在解码函数中,你会看到两行代码:
- o1 = bits >>> 16 & 0xff;
- o2 = bits >>> 8 & 0xff;
我该如何把这两行代码转换成Python呢?
2 个回答
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如,有人可能会在使用某个特定的功能时,发现它的表现和预期不一样。这种情况可能会让人感到困惑,不知道该怎么解决。
通常,解决这类问题的第一步是查看相关的文档或说明,看看是否有提到类似的情况。很多时候,文档里会有一些提示或者解决方案,可以帮助我们理解为什么会出现这个问题。
另外,社区论坛,比如StackOverflow,都是很好的资源。在这些地方,很多开发者会分享他们遇到的问题和解决办法。通过阅读这些讨论,我们可以获得一些灵感,找到解决自己问题的方法。
总之,遇到问题时,不要慌张,先查阅文档,再看看社区的讨论,通常能找到解决方案。
import ctypes
#convert signed to unsigned
bits = ctypes.c_uint32(bits).value
o1 = bits >> 16 & 0xff
o2 = bits >> 8 & 0xff
如果我没记错的话,>>>
是一种右移操作,它会保留最左边那位的值。这样做的效果是保持数字的符号不变(也就是说,负数的最左边会插入一个1,而不是0)。
在Python中,整数可以非常大,没有固定的位数限制。因此,右移操作只是简单地把所有位向右移动,同时保留符号。所以在Python中,你可以直接使用 >>
。
编辑:
正如 @Sven Marnach 指出的那样,>>>
的操作和我在Javascript中的理解正好相反。因此,>>>
不会保留符号,而 >>
似乎会保留符号。还有一个有趣的事实是,在Javascript中,-1>>1
的结果是 -1
,而不是 0
。不用说,我对Javascript的了解非常有限,也不太确定这些操作符在Python中的确切对应是什么。
一种选择可能是明确限制使用的位数(也许可以使用 ctypes.c_int
),然后在用户自定义的右移函数中手动设置最左边的位。