Скоро наступит новогодний праздник, и у меня наконец -то есть свободное время. Я посещаю различные технические статьи каждый день, и это в отличном состоянии.
Я прочитал статью о JS днем, и есть такой абзац, который привлек мое внимание.
Кода -копия выглядит следующим образом:
(function () {
var names = [];
возврат функции (имя) {
addName (имя);
}
функция addName (имя) {
if (! ~ names.indexof (name)) // Если он существует, не добавляйте
names.push (имя);
console.log (names); // ["linkfly"]
}
} ()) ('linkfly');
Что означает оператор "! Если вы не понимаете, начните с ~ Сначала.
Тесты могут показать, что значение результата имеет это правило - (x+1)
После поиска некоторые статьи теряют только одно предложение: поверните его, перевернутое бинарным битом
Из буквального значения здесь мы используем восьмизначное двоичное представление: 3 = 00000011, затем ~ 3 = 11111100, вышеуказанная формула неверна.
Приведенное выше объяснение все еще слишком абстрактно и не конкретное. Фактически, это включает знание исходного кода, обратного кода и комплемента.
Исходный код
Самый высокий бит исходного представления кода - это бит знака, который составляет 0, чтобы указать положительное число и 1, чтобы указать отрицательное число. Остальные биты представляют собой абсолютное значение числа.
Обратный код
Для подписанного номера обратный код положительного числа такой же, как и его исходный код; Обратный код отрицательного числа - это бит обратный из битов, кроме бита знака. Обратный код часто используется в качестве промежуточной формы в процессе поиска кода комплемента.
Дополнение
Дополнение положительного числа такое же, как и исходный код и обратный код; Дополнение отрицательного номера состоит в том, чтобы инвертировать его исходный код, кроме бита знака, и добавить 1 к последнему биту, то есть добавить 1 в дополнение к номеру. Числа в компьютерах обычно выражаются в форме комплемента. В коде дополнения (-128) D используется вместо (-0) d. Примечание: (-128) D не имеет соответствующего исходного кода и обратного кода, (-128) D = (1000 000) b.
Найти дополнительные операции
Операция дополнения не учитывает биты знака, но переворачивает исходные биты своего исходного кода и добавляет 1 к последнему биту. Дополнение числа является дополнением противоположного числа.
Возьмите пример статьи автора и поймите это
~ означает бить инверсию. Если это 00111, он становится 11000 (бить инверсия)
Бинарное представление 57 составляет (1 байт): 00111001
Бинарная после бичея инверсия (~ 57): 11000110 Это выражается как десятичное значение: -70
Это отрицательное число, подписанное число. Отрицательные числа должны быть выражены в компьютере, используя код их комплемента: комплемент = бит символа инвертируется, а затем добавляется 1.
Следовательно, после того, как бит знака -70 (11000110) инвертируется через бить, он составляет (10111001), а затем добавить 1, это (10111010)
Изменение на десятичную систему: -58
Поэтому ~ 57 = -58
В этот момент я наконец понял это. Хотя сводная формула может быстро набрать результаты, она не может объяснить, почему. Как специалисты, мы любим учиться и глубоко входить в подробности.
Дайте время:
Фонд является краеугольным камнем всех верхних уровней. Если вы посвящаете себя практике даосизма, дорога длинная.
Вышеуказанное - все содержание этой статьи. Я надеюсь, что каждый может что -то получить.