Python中的零位左移和右移等效?

时间:2015-01-20 17:00:11

标签: javascript python bit-manipulation rounding floor

在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来实现我正在寻找的东西吗?

2 个答案:

答案 0 :(得分:1)

Bitwise运算符不适用于python浮点数。实际上,JS是我唯一可以期望工作的语言......坦率地说,他们处理JS数字的事实可能是JS实际上没有整数<的事实。 / em> type ...

如果你在int上调用float,然后在python中使用按位运算符,那么一切都应该是相同的。 e.g。

>>> int(2.667) << 0
2

当然,如果你要做的就是截断一个浮点数,你可以在它上面调用int,所有这一切都应该适合这个世界。

答案 1 :(得分: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