Bitwise Operators (примеры)
Побитовые операторы применяются редко, однако они являются очень производительными!
Используете? Поделитесь примерами с использованием побитовых операторов. Вот где использовал я: // переводит в целое число из строки function getIntNumber(str) { return ~~str; } alert(getIntNumber('15.343')); // проверяет массив на наличие единиц function checkArray(arr) { var str = arr.join(''); if (~~str) { return true; } else { return false; } } alert(checkArray([0,0,0,0,0,1,0])); alert(checkArray([0,0,0,0,0,0,0])); |
В основном использую побитовое ИЛИ для использования битовых масок, а остальные операторы как правило только при реализации конкретных алгоритмов, где они используются.
|
Не могу сказать, что прям уж часто, но бывают такие кейсы:
n | 0 n & 0 ~n n >> ... n << ... n & (n - 1) n |= ... n &= ... |
Цитата:
Есть же родное: parseInt('15.343', 10) Цитата:
ИМХО, экономия на спичках и доп.затраты на распутывание кода. |
Единственное прикольное применение это табличка доступов(access) и упаковка ее в число. В остальном побитовые используются в алгоритмах. Например https://github.com/drench/blowfish.j...er/blowfish.js - нужны они там или нет, я хз. Но в js побитовые не очень нужны.
|
var is_browser = false; is_browser |= typeof window !== 'undefined' alert(is_browser && 'Это браузер'); :D |
Цитата:
тут пара человек должна знать секрет мелкой скорости работы всех бинарных операторов. я могу подсказать - читай либо исходники движка, либо спецификацию :) я пытался оптимизировать логику через бинарные операторы ... и я получил замедление. http://jsperf.com/bitwise-vs-boolean Цитата:
|
Цитата:
<iframe width="420" height="315" src="//www.youtube.com/embed/jE1ynO9LxJ4" frameborder="0" allowfullscreen></iframe> |
Цитата:
http://jsperf.com/parseint-vs-bitwise-int |
dmitry111, ты забыл:
testnum | 0 |
Цитата:
var str = 'Привет!'; if(~str.indexOf('и')) { alert('В строке есть буква "и"'); } /*Преобразование в противоположное значение, из true в false и наоборот*/ var myBool = false; myBool ^= 1; //Аналогично myBool = !myBool; |
Цитата:
|
Цитата:
|
В asm.js активно используются http://kripken.github.io/mloc_emscripten_talk/#/20
|
Цитата:
|
Цитата:
var is_browser = 0; if (typeof window !== 'undefined') { is_browser = 1; } Если флагов много, то можно и профит разглядеть :) |
Цитата:
Цитата:
Как выстрелить себе в ногу на переполнении int32 alert((~~1e10) + ' ' + (1e10|0)) |
Цитата:
|
Цитата:
var is_browser = typeof window !== 'undefined'; короче, чем var is_browser = 0; is_browser |= typeof window !== 'undefined' |
Цитата:
|
Кстати, не стреляющий по ногам Math.trunc наверное будет выглядеть так:
if (!Math.trunc) { Math.trunc = function (value) { value = Number(value); if (isNaN(value) || 0 === value || !Number.isFinite(value)) { return value; } return Math.sign(value) * Math.floor(Math.abs(value)); }; } if (!Math.sign) { Math.sign = function (value) { if (0 === value || isNaN(value)) { return value; } return (value > 0) - (value < 0); }; }просто сколько видел полифилов, все делают value|0 |
Часовой пояс GMT +3, время: 04:39. |