Пример 1. Получить двоичное представление числа -65.
Напомним, что 6510 = 010000012. Инвертируем: 10111110. К полученному числу прибавим единицу: 10111110+1=10111111. Убедимся в правильности представления. Сумма +65 и -65 должна составить нуль:
Все восемь бит имеют нулевое значение. Пока будем считать, что полученная единица, перенесенная влево, потеряна. Это правило позволяет выполнять вычитание чисел в двоичной системе исчисления: Вычитание заменяется сложением и в качестве второго слагаемого берется отрицательное число. Пример 2. Вычесть из 65 число 42. Двоичное представление для 42 - это 00101010, а для -42 двоичное представление будет следующим - 11010110:
Пример 3. Какое значение необходимо прибавить к двоичному числу 00000001, чтобы получить число 00000000? В терминах десятичного исчисления ответом будет число -1. Для двоичного исчисления это число 11111111:
В заключение приведем фрагмент уменьшающегося ряда чисел в двоичном представлении:
Шестнадцатеричная система исчисления. Представим, что необходимо просмотреть содержимое некоторых байтов в памяти Требуется определить содержимое четырех последовательных байтов (двух слов), которые имеют двоичные значения. Для более краткого представления таких длинных чисел был разработан специальный метод представления двоичных данных, по которому каждый байт делится пополам и, каждые полбайта выражаются соответствующим значением. Рассмотрим следующие четыре байта:
Так как здесь для представления некоторых чисел требуется две цифры, то расширим систему исчисления так, чтобы
Таким образом, получим более сокращенную форму, которая представляет содержимое вышеуказанных байтов:
Такая система исчисления включает "цифры" от 0 до F, и, так как таких цифр 16, она называется шестнадцатеричным представлением. В таблице ниже мы привели двоичные, десятичные и шестнадцатеричные значения чисел от 0 до 15. Рассмотрим несколько простых примеров шестнадцатеричной арифметики. Следует помнить, что после шестнадцатеричного числа F следует шестнадцатеричное 10, что равно десятичному числу 16:
Битовые операции. Только что мы с Вами разобрались с общей теорией, теперь пообщаемся с битовой арифметикой с точки зрения языка С. В языке C++ существует ряд операций, выполняющихся над разрядами. Они носят название битовые операции:
Остановимся на данных операциях более подробно. 1. Инверсия битов (поразрядное отрицание, дополнение до единицы) инвертирует биты, т.е. каждый бит со значением 1 получает значение 0 и наоборот. 2.Битовое "И" сравнивает последовательно разряд за разрядом два операнда. Для каждого разряда результат равен 1, тогда и только тогда, когда оба соответствующих разряда операндов равны 1. Так, например,
потому что только нулевой и четвертый разряды обоих операндов содержат 1. 3. Битовое "ИЛИ" сравнивает последовательно разряд за разрядом два своих операнда. Для каждого разряда результат равен 1 тогда и только тогда, когда любой из соответствующих разрядов операндов равны 1. Так, например,
потому что все разряды (кроме шестого) в одном из двух операндов имеют значение 1. 4. Битовое исключающее "ИЛИ" сравнивает последовательно разряд за разрядом два своих операнда. Для каждого разряда результат равен 1, если один из двух (но не оба) соответствующих разрядов операндов равен 1. Так, например,
Заметим, что, поскольку нулевой разряд в обоих операндах имеет значение 1, нулевой разряд результата имеет значение 0. Описанные выше операции часто используются для установки некоторых битов, причем другие биты остаются неизменными. Они удобны для фильтрации или маскирования битов. 5. Сдвиг влево сдвигает разряды левого операнда влево на число позиций, указанное правым операндом. Освобождающиеся позиции заполняются нулями, а разряды, сдвигаемые за левый предел левого операнда, теряются. Поэтому, например,
Таким образом, х<<2 сдвигает х влево на 2 позиции, заполняя освобождающиеся позиции нулями (эквивалентно умножению на 4). Для значений без знака имеем
Эти две операции выполняют сдвиг, а также эффективное умножение и деление на степени числа 2. Пример.
Примечание:Здесь мы с Вами знакомимся с еще одной системой исчисления. Целые константы, начинающиеся с цифры 0, являются восьмеричными числами. Восьмеричное представление целых чисел особенно удобно, когда приходится работать с поразрядными операциями, так как восьмеричные числа легко переводятся в двоичные. В этой задаче числа 01,02,03 соответствуют числам 1, 2 и 3, так что появление восьмеричных чисел служит намеком, что программа рассматривает значения x, y и z как последовательности двоичных цифр. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|