【问题标题】:>>> operator in python>>> python中的运算符
【发布时间】:2011-04-18 12:04:06
【问题描述】:

ActionScript 和 javascript 支持 '>>>' 运算符。我正在使用 python 转换 base64 编码/解码的动作脚本。我知道 base64 是可用的,这是为了学习目的。 python没有“...”运算符。 base64 action script

在解码函数中有两行

  1. o1 = 位 >>> 16 & 0xff;
  2. o2 = 位 >>> 8 & 0xff;

如何将这些行转换成 python?

【问题讨论】:

  • 运营商做什么?算术右移? (>>> 之类的东西很难用 Google 搜索,所以请命名它们。)
  • 顺便说一句。如果您在 Python 中需要 AES,只需使用 PyCrypto 包。 pycrypto.org
  • 算术右移 (ASR),与逻辑右移 (LSR) 不同。我仍然希望其中一种语言能够实现旋转指令(ROL 和 ROR),但是这些指令取决于确切的位数,并且某些处理器允许您通过进位位进行旋转,所以它会变得混乱。哦,顺便说一句,bits >>> 16 & 0xffbits >> 16 & 0xff 是相同的,只要 bits 至少有 24 位长,这是由于 & 运算符执行的屏蔽。另一个方程也一样。在英语中,这些等式只是从更大的整数字段中提取单个字节。
  • 我认为这不是学习 Python 的好方法。充其量你会学习语法。但是你会错过用你的新语言学习正确概念的机会。最坏的情况是你会学到 Python 中的错误。此外,您的脚本非常低级,永远不应该在 Python 中实现这样的东西。您应该学习使用正确的库和模块。

标签: python operator-keyword


【解决方案1】:

IINM, >>> 是保留最左边位值的右移。这具有保持数字符号不变的效果(即负数插入 1 作为其 MSB 而不是 0)。

在 Python 中,整数可以任意大。由于位数没有限制,因此没有有意义的最高有效位概念。因此,右移只需将所有位右移并保留符号。因此,在 Python 中,您可以使用 >>

编辑:

正如@Sven Marnach 所指出的,>>> 操作与我认为它在 Javascript 中所做的完全相反。因此>>> 不保留符号,而>> 似乎这样做。另一个有趣的事实是 -1>>1 显然是 -1 而不是 Javascript 中的 0。不用说,我对 Javascript 的了解非常有限,我不确定这些运算符在 Python 中的确切等价物是什么。

一个选项可能是明确限制正在使用的位数(可能通过使用ctypes.c_int),然后在用户定义的右移函数中根据需要手动设置最左边的位。

【讨论】:

  • 这不是真的。 >>>保留符号:试试javascript:alert(-3>>>1);
【解决方案2】:
import ctypes
#convert signed to unsigned
bits = ctypes.c_uint32(bits).value

o1 = bits >> 16 & 0xff
o2 = bits >> 8 & 0xff

【讨论】:

  • 运算符 >> 与 JavaScript 中的 >>> 所做的事情不同,在这种情况下差异很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 2012-09-27
  • 2020-03-19
  • 2013-09-27
  • 2012-06-03
相关资源
最近更新 更多