>>>>> python 中的运算符
ActionScript 和 javascript 支持“>>>”操作员。我正在使用 python 转换 base64 编码/解码的动作脚本。我知道 Base64 可用,这是出于学习目的。 python 没有“...”运算符。 base64 操作脚本
在解码函数中有两个行
- o1 = 位 >>>>> 16& 0xff;
- o2 = 位>>>> 8& 0xff;
如何将这些行转换为Python?
ActionScript and javascript supports '>>>' operator. I am converting an actionscript of base64 encoding/decoding using python. I know base64 is available and this is for learning purpose. python doesn't have "..." operator.
base64 action script
in decode function you have two lines
- o1 = bits >>> 16 & 0xff;
- o2 = bits >>> 8 & 0xff;
How do I convert these lines into python?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
IINM,
>>>
是右移,保留最左边位的值。这具有保持数字符号完整的效果(即负数插入 1 作为其 MSB,而不是 0)。在 Python 中,整数可以是任意大。由于位数不受限制,因此最高有效位没有有意义的概念。因此,右移只是将所有位向右移动并保留符号。因此,在 Python 中您可以只使用
>>
。编辑:
正如 @Sven Marnach 所指出的,
>>>
操作的作用与我认为在 Javascript 中所做的完全相反。因此>>>
不保留符号,而>>
似乎这样做。另一个有趣的事实是,显然-1>>1
在 Javascript 中是-1
而不是0
。不用说,我对 Javascript 的了解非常有限,而且我不确定这些运算符在 Python 中的确切等价物是什么。一种选择可能是显式限制正在使用的位数(可能通过使用 ctypes.c_int ),然后根据用户定义的右移函数的需要手动设置最左边的位。
IINM,
>>>
is a right shift that preserves the value of the leftmost bit. This has the effect of keeping the sign of the number intact (i.e. negative numbers get a 1 inserted as their MSB instead of a 0).In Python, integers can be arbitrarily big. There is no meaningful concept of a most significant bit since the number of bits is not bounded. Right shifts therefore simply shift all bits to the right and preserve the sign. So, in Python you can just use
>>
.Edit:
As @Sven Marnach has pointed out, the
>>>
operation does the exact opposite of what I thought it did in Javascript. Thus>>>
does not preserve sign, while>>
appears to do so. Another interesting fact is that apparently-1>>1
is-1
and not0
in Javascript. Needless to say, my knowledge of Javascript is really limited and I am not sure what the exact equivalent of these operators are in Python.One options might be to explicitly limit how many bits are being used (perhaps by using
ctypes.c_int
) and then set the left most bit manually as desired in a user defined right shift function.