JavaScript Zero Bitwise Left-Shift и Right-Shift эквивалентен в Python?

В 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 для достижения того, что я ищу?


person fra    schedule 20.01.2015    source источник
comment
Есть побитовые операторы, но вы не можете побитовое смещение числа с плавающей запятой... Javascript имеет много нестандартного поведения. Вам нужны round, floor или int, в зависимости от вашего контекста.   -  person user3467349    schedule 20.01.2015


Ответы (2)


просто приведите 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
person Padraic Cunningham    schedule 20.01.2015

Побитовые операторы не работают с поплавками Python. На самом деле, JS — единственный язык, где я могу ожидать, что это сработает... Честно говоря, тот факт, что они работают с числами JS, вероятно, является артефактом того факта, что JS на самом деле не имеет целого числа типа...

Если вы вызываете int на своем float, а затем используете побитовые операторы в python, все должно работать одинаково. например

>>> int(2.667) << 0
2

Конечно, если все, что вы пытаетесь сделать, это усечь число с плавающей запятой, вы можете просто вызвать для него int, и с миром все должно быть в порядке.

person mgilson    schedule 20.01.2015