admin / 21.03.2018
.
Побитовые операторы в JavaScript работают с 32-битными целыми числами в их двоичном представлении.
Это представление называется «32-битное целое со знаком, старшим битом слева и дополнением до двойки».
Разберём, как устроены числа внутри подробнее, это необходимо знать для битовых операций с ними.
Содержание
Примеры представления чисел в двоичной системе:
a = 0; // 00000000000000000000000000000000 |
a = 1; // 00000000000000000000000000000001 |
a = 2; // 00000000000000000000000000000010 |
a = 3; // 00000000000000000000000000000011 |
a = 255;// 00000000000000000000000011111111 |
Обратите внимание, каждое число состоит ровно из 32-битов.
Младший бит слева
Несмотря на то, что нам такой способ записи чисел кажется совсем обычным, бывают языки и технологии, использующие способ записи «младший бит слева», когда биты пишутся наоборот, от меньшего разряда к большему.
Именно поэтому спецификация EcmaScript явно говорит «старший бит слева».
Двоичный вид числа, обратного данному (например,5и-5) получается путём обращения всех битов с прибавлением 1.
То есть, нули заменяются на единицы, единицы — на нули и к числу прибавляется 1. Получается внутреннее представление того же числа, но со знаком минус.
Например, вот число 314:
Чтобы получить -314, первый шаг — обратить биты числа: заменить 0 на 1, а 1 на 0:
Второй шаг — к полученному двоичному числу приплюсовать единицу, обычным двоичным сложением: 11111111111111111111111011000101 + 1 = 11111111111111111111111011000110.
Итак, мы получили:
-314 = 11111111111111111111111011000110 |
Принцип дополнения до двойки делит все двоичные представления на два множества: если крайний-левый бит равен 0 — число положительное, если 1 — число отрицательное. Поэтому этот бит называется знаковым битом.
Поговорим-ка мы об IP-адресах и о том как они образуются. А если быть точнее, то обсудим мы сегодня интернет протокол 4-ой версии(IPv4). Новая версия данного протокола носит имя IPv6, его обсудим чуть позже.
IP-адрес(Internet Protocol Address) — это уникальный сетевой адрес компьютера либо другого сетевого оборудования в компьютерной сети. Каждый дом или здание имеет свой адрес, который идентифицирует его. И нет двух зданий с одинаковым адресом. Так же и в компьютерной сети. У каждого компьютера или сетевого оборудования(роутеры, телефоны, сетевые принтеры) должен быть свой уникальный адрес. Ведь именно по этому адресу и приходит информация из сети. В этом то и состоит работа Internet Protocol`а: он должен выдать уникальный адрес устройству, должен обеспечивать сортировку и доставку пакетов. В каждый входящий и исходящий IPv4-пакет включены IPv4-адрес отправителя и получателя. Протокол IPv4 обеспечивает маршрутизацию этих пакетов от отправителя до получателя.
Каждый из нас знает как выглядит адрес дома. А как же выглядит IP-адрес компьютера? Приблизительно вот так:
00001010000100000000101010001111
Те, которые хоть раз видели ip-адрес, а видели наверное многие, скажут, что я что-то путаю. И добавят, что ip-адрес выглядит вроде этого:
10.16.10.143
На что я отвечу, то что ip-адрес выглядит вот так:
168823439
или вот так:
0А100А8F
Так где же правда? Да везде! Все эти числа обозначают один и тот же ip-адрес. Самый ходовой его записью является первый. Почему? Да потому что это двоичное число и соответственно в таком виде его видят машины! Дальше идет вторая запись. Это запись уже для нас — для людей!
Третья запись представляет адрес в десятичной форме, а четвертая — в шестнадцатеричной. 3 и 4 записи, в основном, используются только в учебниках.
Рассмотрим первую и вторую запись. Первая запись — это число, состоящее только из двух цифр: 1 и 0. Все возможные его комбинации равны 2 в 32 степени(так как в числе 32 разряда). Отсюда следует, то что и ip-адресов может быть только 2 в 32 степени, а это 4 294 967 296 уникальных адресов. А людей уже больше 7 млрд! Именно поэтому и увидела свет новая версия интернет протокола. Но о ней будет немного позже.
Вторая запись формируется таким образом: ip-адрес в двоичном формате, делится на 4 части(октета):
00001010 00010000 00001010 10001111
Таким образом, образуются 4 числа по 8 цифр. После чего каждую часть переводят в десятичную систему счисления и получают:
10.16.10.143
Я не хочу освещать процесс перевода двоичного числа в десятичный.
Для этого можете использовать Калькулятор.
Узнать какой у Вас IP-адрес не составляет труда. Для этого Вам нужно открыть командную строку и ввести в окно команду ipconfig. Там Вы сможете не только узнать свой IP-адрес, но и другую связанную информацию. Так же, Вы можете проверить свой IP-адрес на специальных сайтах, таких как 2ip.ru. И кстати, IP-адреса указанные в командной строке и на сайте могут отличаться друг от друга. Это объясняется наличие частных IP-адресов.
В двоичной системе исчисления используется только две цифры: 0 и 1. Так как это система исчисления с основанием, равным 2, то каждая позиция в двоичной последовательности представляет степень двойки. Если связать это со стандартной десятичной системой исчисления, которая используется каждый день, то можно понять, что все не так плохо.
Возьмем число 201. При рассмотрении этого трехзначного числа можно заметить, что в нем присутствует разряд единиц, разряд десятков и разряд сотен. Поэтому число 201 равно 1х1+0х10+2х100. Цифра в каждом разряде умножается на степень 10 с показателем, соответствующим положению разряда. Так как двоичная система исчисления имеет основание 2, цифра каждого разряда умножается на степень двойки, соответствующую положению разряда.
Для преобразования десятичных чисел в двоичное представление, можно просто начать с единицы и продолжить удвоение числа, пока не будет достигнуто значение 128. После этого необходимо использовать последовательность нумерации из приведенной таблицы преобразования.
Теперь посмотрим, как адрес IP 10.8.32.6 преобразовывается в двоичную форму.
Использование простой таблицы для преобразования двоичных чисел
Столбцы двоичных разрядов (по основанию 2) |
||||||||
Десятичное число |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
10 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
8 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
32 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
6 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
Вот пример техники для преобразования десятичного числа в двоичное представление.
1. Найдите наибольшее число в таблице преобразования, которое меньше или равно числу, преобразование которого необходимо выполнить (128, 64, 32, 8 и т.д.) и укажите 1 в его столбце.
2. Отнимите число из выбранной колонки от числа, преобразование которого выполняется.
3. Найдите наибольшее число в таблице преобразования, которое меньше или равно числу, оставшемуся после первого шага, и поместите 1 в столбец этого числа.
4. Отнимите число из выбранного столбца от числа, которое осталось на шаге 2.
5.
Повторите шаги 3 и 4, пока разность не станет равна 0; после этого поместите 0 во все столбцы, которые не содержат 1. Вот это и будет наше двоичное число!
Для преобразования числа 10 необходимо найти в таблице самое большое число, не превышающее 10. Это будет 8, поэтому в столбец числа 8 необходимо поместить 1. После этого необходимо отнять 8 от 10. В результате получится число 2. В столбце, соответствующем числу 2, необходимо разместить 1. Результатом последней разности будет 2, поэтому для завершения преобразования во все остальные столбцы необходимо поместить 0.
Использование этой таблицы для преобразования двоичного числа в десятичное еще проще, чем преобразование десятичного числа в двоичное. Просто запишите 8-разрядное число в таблице, указывая каждый разряд в одном столбце таблицы. После этого сложите значения столбцов таблицы, которые содержат 1. Например, двоичное число 10100001 будет равно 128+32+1 или 161.
В главе 4 будет показано, как использовать бесплатную утилиту, предоставленную на сопровождающем компакт-диске, для преобразования адресов IP в разные представления. Поэтому не будем больше тратить время на двоичную арифметику и сразу перейдем к структуре адреса TCP/IP.
10.08. Раздел Локальная сеть
.
Теперь, когда мы знаем, что такое IP-адрес, маска подсети, идентификаторы сети и узла, полезно запомнить правила, которые следует применять при назначении этих параметров:
1. идентификатор сети не может содержать только двоичные нули или только единицы. Например, адрес 0.0.0.0 не может являться идентификатором сети;
2. идентификатор узла также не может содержать только двоичные нули или только единицы – такие адреса зарезервированы для специальных целей:
· все нули в идентификаторе узла означают, что этот адрес является адресом сети. Например, 192.168.5.0 является правильным адресом сети при использовании маски 255.255.255.0 и его нельзя использовать для адресации компьютеров,
· все единицы в идентификаторе узла означают, что этот адрес является адресом широковещания для данной сети. Например, 192.168.5.255 является адресом широковещания в сети 192.168.5.0 при использовании маски 255.255.255.0 и его нельзя использовать для адресации компьютеров;
3. идентификатор узла в пределах одной и той же подсети должен быть уникальным;
4. диапазон адресов от 127.0.0.1 до 127.255.255.254 нельзя использовать в качестве IP-адресов компьютеров. Вся сеть 127.0.0.0 по маске 255.0.0.0 зарезервирована под так называемый «адрес заглушки» (loopback), используемый в IP для обращения компьютера к самому себе.
Это легко проверить: достаточно на любом компьютере с установленным протоколом TCP/IP выполнить команду
PING 127.12.34.56
и, если протокол TCP/IP работает, вы увидите, как ваш компьютер будет отвечать на собственные запросы.
Классовая и бесклассовая IP-адресация
Первоначальная система IP-адресации в Интернете выглядела следующим образом. Все пространство возможных IP-адресов (а это более четырех миллиардов, точнее 4 294 967 296 адресов) было разбито на пять классов, причем принадлежность IP-адреса к определенному классу определялась по нескольким битам первого октета (табл. 8.2).
Заметим, что для адресации сетей и узлов использовались только классы A, B и C. Кроме того, для этих сетей были определены фиксированные маски подсети по умолчанию, равные, соответственно, 255.0.0.0, 255.255.0.0 и 255.255.255.0, которые не только жестко определяли диапазон возможных IP-адресов узлов в таких сетях, но и механизм маршрутизации.
Чтобы рассчитать максимально возможное количе-ство узлов в любой IP-сети, достаточно знать, сколько битов содержится в идентификаторе узла, или, иначе, сколько нулей имеется в маске подсети. Это число используется в качестве показателя степени двойки, а затем из результата вычитается два зарезервированных адреса (сети и широковещания). Аналогичным способом легко вычислить и возможное количество сетей классов A, B или C, если учесть, что первые биты в октете уже зарезервированы, а в классе A нельзя использовать IP-адреса 0.0.0.0 и 127.0.0.0 для адресации сети.
Для получения нужного диапазона IP-адресов организациям предлагалось заполнить регистрационную форму, в которой следовало указать текущее число компьютеров и планируемый рост компьютерного парка в течение двух лет.
Первоначально данная схема хорошо работала, поскольку количество сетей было небольшим. Однако с развитием Интернета такой подход к распределению IP-адресов стал вызывать проблемы, особенно острые для сетей класса B. Действительно, организациям, в которых число компьютеров не превышало нескольких сотен (скажем, 500), приходилось регистрировать для себя целую сеть класса B. Поэтому количество доступных сетей класса B стало на глазах «таять», но при этом громадные диапазоны IP-адресов (в нашем примере – более 65000) пропадали зря.
Чтобы решить проблему, была разработана бесклассовая схема IP-адресации (Classless InterDomain Routing, CIDR), в которой не только отсутствует привязка IP-адреса к классу сети и маске подсети по умолчанию, но и допускается применение так называемых масок подсети с переменной длиной (Variable Length Subnet Mask, VLSM). Например, если при выделении сети для вышеуказанной организации с 500 компьютерами вместо фиксированной маски 255.255.0.0 использовать маску 255.255.254.0,то получившегося диапазона из 512 возможных IP-адресов будет вполне достаточно.
Оставшиеся 65 тысяч адресов можно зарезервировать на будущее или раздать другим желающим подключиться к Интернету.
Этот подход позволил гораздо более эффективно выделять организациям нужные им диапазоны IP-адресов, и проблема с нехваткой IP-сетей и адресов стала менее острой.
⇐ Предыдущая19202122232425262728Следующая ⇒
Дата добавления: 2014-11-25; Просмотров: 1686; Нарушение авторских прав?;
FILED UNDER : IT