Все побитовые операции работают с 4-байтовым signed int и возвращают 8-байтовое double, поэтому они
не быстрее обычных операций, а даже чуть медленнее - из-за преобразований типов.
Операция >>> сдвигает побитово вправо, а слева нулями дополняет. В результате эффект - тот же, что и при простом сдвиге >> для положительных чисел.
Для отрицательных - все по-другому. Например, -9 в битовом виде выглядит как: 11111111111111111111111111110111.
Операция >>> даст эффект: -9 >>> 2 будет в битовом виде 00111111111111111111111111111101, т.е 1073741821.
Операторы больше-меньше также работают со строками, сравнивая их лексикографически, т.е посимвольно.
"B">"a"
"bc" < "bd"
Сравнение == делается с приведением типов, а === без приведения типов, например:
0 == false // верно
// но
0 !== false //типы разные
Проверка равенства осуществляется особым образом, если один из операндов - undefined, null, NaN. Более подробно об алгоритме в этом случае можно прочитать в секции 11.9.3 стандарта ECMA-262.
?
Тернарный оператор. В старых парсерах javascript с ним были проблемы, надо было заключать сравнение в скобки, но в новых - вполне нормальный оператор
var test = (1==2) ? "one" : "two"
// эквивалентно
var test = 1==2 ? "one" : "two"
Не-не-не, выражения 'a+b' и '+b' -- это две большие разницы, даже если а = 0.
В пером случае это будет конкатенаци (или сложение для чисел) - бинарная операция. Во-втором - операция унарная, аналогичная '-b' -- смена знака. Хотя в случае с '+' это менее очевидно, но выполняется приведение типа к числу.
"...Сравнение == делается с приведением типов, а === без приведения типов...". Наверное, наоборот:Сравнение == делается БЕЗ приведения типов, а === С приведения типов
Мне кто нибудь может подсказать как исчисляется
>>> (Сдвиг вправо с заполнением нулями)
>>>= (Сдвиг вправо с заполнением нулями и присваиванием)
Пытаюсь понять, но никак не получается.
x=13>>>1
x=6
Как они его вычислили, что получилась такая сумма?
Про разряды я то знаю, мне интересно сам ход выполнения операции.
да, все это понятно, но формула вычисления должна быть?
y=-8>>>2
y=1073741822
Такое по таблице не посчитаешь.
Допустим
x=10%2;
x=0
Вычисление происходит следующим путем
10 : 2 = 5; 5 * 2 = 10; 10 - 10 = 0;
Называется это остаток от деления, а как исчисляется я искал в многих книгах и веб-сайтах, но так и не нашел. Получается, число плюс возможен остаток.
Меня интересует формула вычисления, не подскажешь?
Не парь себе мозги.
Побитовый сдвиг - это одна из базовых операций процессора. Никаких таблиц и никакой математики. Только алгоритм перназначения значений битов.
-8 хранится в обратном коде:
11111111111111111111111111111000 = 4294967288
сдвиг на 2 вправо с доопределением 0 = делению на 4:
00111111111111111111111111111110 = 1073741822
Сдвиг влево аналогичен умножению на 2 в степени сдвига.
Сдвиг вправо аналогичен делению без остатка на 2 в степени сдвига.
1<<5 = 1*2^5 = 32
32>>5 = 32 / 2^5 = 1
Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены. Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Новости
Открылась регистрация на мастер-классы по профессиональному Javascript, AJAX/COMET, jQuery в городах:
Возвращает последний операнд, если все они верны.
Верно, эффект имеет только использование ||, с && же подобным образом обращение не срабатывает
Спасибо, развернул эту часть статьи чуть пошире.
"+" делает конкатенацию, если хотя бы один операнд - строка, причем, не обязательно первый.
А как же такой красивый способ преобразования к числу?
var s = '7';
var n = +s;
alert(n.constructor); // Number
Да, интересно себя ведёт оператор
alert("1"+1) // 11
alert(+"1"+1) // 2
alert(0+"1"+1) // 011
Не-не-не, выражения 'a+b' и '+b' -- это две большие разницы, даже если а = 0.
В пером случае это будет конкатенаци (или сложение для чисел) - бинарная операция. Во-втором - операция унарная, аналогичная '-b' -- смена знака. Хотя в случае с '+' это менее очевидно, но выполняется приведение типа к числу.
"...Сравнение == делается с приведением типов, а === без приведения типов...". Наверное, наоборот:Сравнение == делается БЕЗ приведения типов, а === С приведения типов
Нет, как раз == с приведением, === без
Мне кто нибудь может подсказать как исчисляется
>>> (Сдвиг вправо с заполнением нулями)
>>>= (Сдвиг вправо с заполнением нулями и присваиванием)
Пытаюсь понять, но никак не получается.
x=13>>>1
x=6
Как они его вычислили, что получилась такая сумма?
Про разряды я то знаю, мне интересно сам ход выполнения операции.
Если я не ошибаюсь и правильно понял:
да, все это понятно, но формула вычисления должна быть?
y=-8>>>2
y=1073741822
Такое по таблице не посчитаешь.
Допустим
x=10%2;
x=0
Вычисление происходит следующим путем
10 : 2 = 5; 5 * 2 = 10; 10 - 10 = 0;
Называется это остаток от деления, а как исчисляется я искал в многих книгах и веб-сайтах, но так и не нашел. Получается, число плюс возможен остаток.
Меня интересует формула вычисления, не подскажешь?
Не парь себе мозги.
Побитовый сдвиг - это одна из базовых операций процессора. Никаких таблиц и никакой математики. Только алгоритм перназначения значений битов.
-8 хранится в обратном коде:
11111111111111111111111111111000 = 4294967288
сдвиг на 2 вправо с доопределением 0 = делению на 4:
00111111111111111111111111111110 = 1073741822
Сдвиг влево аналогичен умножению на 2 в степени сдвига.
Сдвиг вправо аналогичен делению без остатка на 2 в степени сдвига.
1<<5 = 1*2^5 = 32
32>>5 = 32 / 2^5 = 1
Это я знаю, как исчисляется. Причем двойка(2) в этой формуле обязательна!
Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.