tgoop.com/smelukov_dev/83
Last Update:
Читатели задают вопросы о том, что делает ~~(number / 10)
. Давайте разбираться, ведь одна из целей разборов этих задач - узнать что-то новое.
Оператор ~
- это "побитовое НЕ", он инвертирует биты числа на противоположные: 10101
-> 01010
.
Итак, зачем это всё? Дело в том, что побитовые операции можно производить только с целыми числами, поэтому при попытка применить побитовые операции к числу с плавающей точкой, дробная часть будет отброшена и это дешевле нежели использовать Math.floor
и т.п.
Тут встает вопрос в том, какой побитовый оператор использовать, ведь каждый их них как-то модифицирует число. То есть применив побитовый оператор, мы так или иначе модифицируем число, а значит нам нужно применить такой оператор, чтобы биты числа можно было восстановить в их изначальный вид. Таким оператор как раз является ~:10101
-> 01010
А теперь, если мы снова применим этот оператор к получившемуся числу, то получим изначальный порядок бит:01010
-> 10101
Таким образом мы очень дешево избавились от дробной части при помощи битовых операций, не повредив само число.
BY Сергей Мелюков
Share with your friend now:
tgoop.com/smelukov_dev/83