123 10= 0*2 7+ 1*2 6+ 1*2 5+ 1*2 4+ 1*2 3+ 0*2 2+ 1*2 1+ 1*2 0= 0*128 + 1*64 + 1*32 + 1*16 + 1*8 + 0*4 + 1*2 + 1*1 = 01111011 2
______________________
10Что и было сделано у некоторых народов, например у майя или чукчей. — Прим. ред.
_________________
60 стр. Часть 1. Первое знакомство с С++
Существует соглашение, которое гласит, что в записи двоичных чисел используются 4, 8, 16, 32 или даже 64 двоичных цифр, даже если старшие цифры — нули. Внутреннее представление числа в компьютере строится именно таким образом.
Понятие разряда применяется к числам, кратным десяти, двоичный же разряд называется битом. Восемь битов составляют байт, а слово обычно представляется или двумя, или четырьмя байтами.
Поскольку основа двоичной системы счисления очень мала, для представления чисел необходимо использовать слишком большое количество битов. Для представления таких обычных чисел, как 123 10, неудобно использовать выражения вида 01111011 2. Поэтому программисты предпочитают представлять числа блоками из четырёх битов.
С помощью одного четырёхбитового блока можно представить любое число от 0 до 15, и такая система счисления называется шестнадцатеричной ( hexadecimal ), т.е. системой по основанию 16. Часто употребляют её сокращённое название hex .
В шестнадцатеричной системе обозначения цифр от 0 до 9 остаются теми же, а числа от 10 до 15 представляются с помощью первых шести букв алфавита: А вместо 10, В вместо 11 и т.д. Следовательно, 123 10— это 7В 16 .
123 = 7 * 16 1+ В ( т.е. 11 ) * 16 0= 7В 16
Поскольку программисты предпочитают представлять числа с помощью 4, 8, 16 или 32 битов, шестнадцатеричные числа состоят соответственно из 1, 2, 4 или 8 шестнадцатеричных разрядов ( даже если ведущие разряды равны 0 ).
В заключение замечу, что, так как терминал не поддерживает нижний индекс, записывать шестнадцатеричные символы в виде 7В 16 неудобно. Даже в том текстовом редакторе, который я использую сейчас, довольно неудобно всякий раз менять режимы шрифтов для ввода всего двух символов. Поэтому программисты договорились начинать шестнадцатеричные числа с 0х ( это странное обозначение было придумано ещё во время разработки языка С ). Таким образом, 7В 16 равно 0x7В . Следуя этому соглашению, 0x7В равно 123, тогда как 0x123 равно 291.
К шестнадцатеричным числам можно применять все те же математические операторы, что и к десятичным. Просто нам трудно выполнить в уме умножение чисел 0хС * 0хЕ потому, что таблица умножения, которую мы учили в школе, применима только к десятичной системе счисления.
Выражения с римскими числами...61
Интересно, что некоторые системы чисел значительно препятствовали развитию математики. К таким относится и так называемая римская система. Сложить два римских числа не очень сложно:
XIX + XXVI = XLV
Последовательность выполнения сложения такова:
а) IX + VI : I после V "уничтожает" I перед X , поэтому в результате получаем XV ;
б) X + XX = XXX , если добавить ещё один X , получим XXXX , или XL .
Сложность вычитания римских чисел приблизительно такая же. Однако чтобы умножить два римских числа, требуется диплом бакалавра математики ( у вас волосы станут дыбом от правила, которое объясняет, как добавить к X разряд справа так, чтобы X*IV равнялось XL ). А уж о делении римских чисел можно писать целые диссертации. Словом, хорошо, что мы пользуемся арабскими числами...
_________________
61 стр. Глава 4. Выполнение логических операций
►Выполнение побитовых логических операций...62
Все числа С++ могут быть представлены в двоичном виде, т.е. с использованием только 0 и 1 в записи числа. В табл. 4.2 указаны операции, которые работают с числами побитово; отсюда и происходит название термина "побитовые операции".
Таблица 4.2. Побитовые операции
_________________
Оператор — Функция
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
~ — Каждый бит меняет своё значение на противоположное: 0 заменяется 1, 1 — нулём
& — Побитовое И: поочередно выполняет операцию И с парами битов левого и правого аргумента
| — Побитовое ИЛИ
^ — Побитовое исключающее ИЛИ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
С помощью побитовых операций можно сохранять большое количество информации в маленьком участке памяти. В мире существует множество вещей, которые имеют только два состояния ( или, максимум, четыре ). Вы или женаты ( замужем ), или нет ( хотя можете быть в разводе или ещё не женаты ). Вы или мужчина, или женщина ( по крайней мере, так сказано в моих водительских правах ). В С++ каждую такую характеристику вы можете сохранить в одном бите. Таким образом, поскольку для хранения целого числа выделяется 4 байта, в тип int можно упаковать значения 32 разных свойств.
Читать дальше