【问题标题】:JavaScript Zero Bitwise Left-Shift and Right-Shift Equivalent in Python?Python中的JavaScript零位左移和右移等效?
【发布时间】:2015-03-19 00:24:36
【问题描述】:

在 JavaScript 中,我们可以使用按位左移和右移运算符来截断浮点数并将其向下舍入到最接近的整数。

例子:

console.log(2.667 << 0); //outputs 2
console.log(2.667 >> 0); //outputs 2

这些位运算符也做同样的事情:

console.log(2.667 | 0); //outputs 2
console.log(0 | 2.667); //outputs 2
console.log(~~2.667); //outputs 2

然而,在 Python 中,相同的操作会返回错误。

在 Python 中是否有任何等价物——使用位运算符?或者我必须使用 int() 和 floor division 来实现我想要的吗?

【问题讨论】:

  • 有按位运算符,但您不能像这样按位移动浮点数... Javascript 有很多非标准行为。您想要的是 roundfloorint,具体取决于您的上下文。

标签: javascript python bit-manipulation rounding floor


【解决方案1】:

只需将 float 转换为 int int(2.667) 如果您确实想要降低负数而不只是截断使用 math.floor ,一旦浮点数为非负数,它将始终降低/截断浮点数。

In [7]: int(2.667 )
Out[7]: 2

In [22]: from math import floor

In [23]: int(floor(-2.667 )) # just floor(-2.667 ) using python3
Out[23]: -3

【讨论】:

    【解决方案2】:

    按位运算符不适用于 python 浮点数。事实上,JS 是我可能期望它工作的唯一语言......坦率地说,他们在 JS 数字上工作的事实可能是 JS 实际上没有 integer 输入...

    如果你在你的float 上调用int,然后在python 中使用按位运算符,一切都应该是一样的。例如

    >>> int(2.667) << 0
    2
    

    当然,如果您只想截断浮点数,您可以直接调用 int 就可以了。

    【讨论】:

      猜你喜欢
      • 2011-02-08
      • 2017-04-29
      • 2013-10-31
      • 2023-02-09
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      相关资源
      最近更新 更多