4865

Системы счисления. Двоичная система счисления. Перевод чисел из одной системы счисления в другую. Машинное представление базовых типов С++

Лекция

Информатика, кибернетика и программирование

Системы счисления. Двоичная система счисления. Перевод чисел из одной системы счисления в другую. Перевод целой части. Перевод дробной части. Машинное представление базовых типов С++. Системы счисления. Под числом понимают некоторую абстрактную меру...

Русский

2012-11-28

67.5 KB

22 чел.

Системы счисления. Двоичная система счисления. Перевод чисел из одной системы счисления в другую. Перевод целой части. Перевод дробной части. Машинное представление базовых типов С++.

Системы счисления.

Под числом понимают некоторую абстрактную меру количества. Системой счисления называют способ записи чисел с помощью письменных знаков,  называемых цифрами. Если значение цифры в записи числа зависит от её положения, систему счисления называют позиционной. Например, в десятичной системе счисления число 01 обозначает единицу, 10 – десять. Количество цифр в системе счисления называется её основанием. В позиционной системе счисления с основанием  используется  цифр (от  до ), числа записываются в виде , где  – цифры. Примером непозиционной системы счисления может служить система римского счета.

Для организации машинных вычислений удобна двоичная система счисления, содержащая только две цифры – 0 и 1. Кроме того, в программировании часто используются восьмеричная и шестнадцатеричная системы.

Перевод чисел из одной системы счисления в другую.

Число, записанное в системе с основанием  можно перевести в систему с другим основанием, воспользовавшись формулой:

 (1)

Для целых чисел, очевидно,  для всех отрицательных , поэтому для перевода целых чисел можно воспользоваться следующим алгоритмом:

  1.  Вычислить частное и остаток от деления заданного числа на основание целевой системы счисления . Остаток от деления будет очередной цифрой  в записи числа в новой системе счисления. Цифры нумеруются справа налево.
  2.  Если частное равно нулю, перевод числа закончен, иначе применяем к частному пункт 1.

Если , то необходимо ввести дополнительные символы для обозначения цифр новой системы счисления со значениями большими либо равными 10. Как правило, для этого используются буквы латинского алфавита.

Пример:

  1.  Перевести число 123410 в семиричную систему счисления.

1234 = 176 * 7 + 2  => a0 = 2

176  =   25 * 7 + 1  => a1 = 1

  25  =     3 * 7 + 4  => a2 = 4

    3  =     0 * 7 + 3  => a3 = 3

В итоге получаем  123410 = 34127 = 3 * 73 + 4 * 72 + 1 * 71 + 2 * 70

  1.  Перевести число 74219 в шестнадцатиричную систему счисления.

74279 = 7 * 93 + 4 * 92 + 2 * 91 + 7 * 90 = 545210

5452 = 340 * 16 + 12  => a0 = C

 340 =   21 * 16 + 4   => a1 = 4

   21 =     1 * 16 + 5    => a2 = 5

     1 =     0 * 16 + 1    => a2 = 1

74279 = 154C16

Особенно удобно осуществляется перевод между двоичной, восьмеричной и шестнадцатеричной системами, наиболее часто используемыми в программировании. Заметим, что 16 = 24, а 8 = 23, откуда следует, что каждая цифра в шестнадцатиричной системе может быть выражена 4 цифрами в двоичной, а каждая цифра восьмеричной – тремя цифрами двоичной, например:

616 = 01102

B16 = 10112

F16 = 11112

28 = 0102

58 = 1012

78 = 1112

Таким образом, для перевода шестнадцатеричного числа в двоичную систему, достаточно вычислить представление каждой его цифры в двоичной системе, и составить из них результат:

B6F16 = B * 162 + 6 * 161 + F * 160 = B * ( 24 )2 + 6 * ( 24 )1 + F * ( 24 )0 = …

= ( 1011 0110 1111 )2

2578 = 2 * 82 + 5 * 81 + 7 * 80 = 2 * ( 23 )2 + 5 * ( 23 )1 + 7 * ( 23 )0 = ( 010 101 111 )2

Для обратного перевода из двоичной системы достаточно разбить двоичное представление числа на группы по 4 (для шестнадцатиричной) или на 3 (для восьмеричной) цифры, начиная справа и определить для каждой группы соответствующую ей цифру в целевой системе счисления. При необходимости, двоичное представление исходного числа можно дополнить слева нужным количеством нулей:

( 11011011001 )2 = ( 0110 1101 1001)2 = 6D916

 ( 11011011001 )2 = ( 011 011 011 001)2 = 33318

Перевод дробной части.

Для перевода дробной части также воспользуемся формулой (1), сформулировав алгоритм перевода:

  1.  Умножить дробную часть числа на .
  2.  Целая часть результата будет очередной цифрой  в записи числа в целевой системе счисления. Цифры  в записи числа располагаются слева направо в порядке возрастания модуля . Если дробная часть числа равна нулю, процесс перевода закончен, иначе – применить к дробной части этот же алгоритм начиная с пункта 1.

Как правило, количество дробных разрядов ограничивается, поэтому перевод осуществляется с заданной точностью.

  1.  Перевести число 0.625 в двоичную систему:

0.625 * 2 = 1.25  => a-1 = 1

0.25   * 2 = 0.5    => a-2 = 0

0.5     * 2 = 1.0    => a-3 = 1

В итоге, 0.62510 = 0.1012

Двоичная система счисления.

Правила арифметических действий в двоичной системе аналогичны десятичной и базируются на следующих таблицах:

Сложение:

0 + 0 = 0

0 + 1 = 1

1 + 0 = 1

1 + 1 = 102 (перенос разряда)

Умножение:

0 * 0 = 0

0 * 1 = 0

1 * 0 = 0

1 * 1 = 1

С машинным представлением чисел в двоичной системе связаны несколько понятий:

Бит – количество информации, содержащееся в одном разряде двоичной системы счисления. Иначе говоря, один бит – это данные, которые можно выразить значением 1 или 0.

Двоичный разряд – элемент архитектуры компьютера, хранящий один бит данных.

Машинное слово – упорядоченное множество двоичных разрядов. Количество разрядов в машинном слове называется его размерностью. Разряды нумеруются справа налево, начиная с 0. Самый правый разряд называется младшим, самый левый – старшим.

Байт – машинное слово минимальной размерности, используемое для хранения, передачи и обработки данных. Как правило, размерность байта равна 8 двоичных разрядов. Как правило, размерности всех других машинных слов кратны байту.

Размерность байта принята не только для представления данных в большинстве компьютеров, но и в качестве стандарта для хранения данных на внешних носителях, для передачи данных по каналам связи, для представления текстовой информации. Кроме того, байт является универсальной «мерой» – размерность всех форм представления данных устанавливается кратной байту. При этом машинное слово считается разбитым на байты, которые нумеруются, начиная с младших разрядов.

Стандартное машинное слово – машинное слово, размерность которого совпадает с разрядностью процессора. Такое машинное слово процессор способен обработать сразу целиком, и большинство внутренних инструкций процессора использует его для обработки данных. Кроме того, используются укороченное машинное слово и двойное машинное слово (обозначаемое в языках программирования терминами short и long).

Машинное представление базовых типов.

Для представления положительных (беззнаковых, unsigned) целых чисел используется прямой машинный код, в котором число интерпретируется естественным образом, все разряды являются значащими, что позволяет хранить число в диапазоне 0 ~ 2N-1, где N – размерность (количество разрядов), отвечающее заданному типу данных.

Для знаковых целых чисел диапазон значений разбивается на две половины (для отрицательных и положительных чисел): -2N-1-1 ~ 2N-1-1. При этом возможны два способа представления: в прямом коде старший разряд отводится для хранения знака (0 для положительного и 1 для отрицательного), а модуль числа хранится в младших N-1 разрядах в естественном виде.

Другим способом представления знаковых чисел является дополнительный код. В дополнительном коде положительные числа представляются прямым кодом, а для отрицательных чисел используется следующее преобразование:

  1.  Получить прямой код модуля числа.
  2.  Инвертировать код (заменить 1 на 0 и наоборот).
  3.  Прибавить к инверсному коду 1.

Например, для числа -37, интерпретируя его как величину типа char (1 байт), получим:

  1.  Прямой код модуля 37:   00100101
  2.  Инверсный код:   11011010
  3.  Дополнительный код:  11011011

При обратном преобразовании по старшему разряду дополнительного кода необходимо определить знак числа. Если оно отрицательное, то используется обратный алгоритм:

  1.  Вычесть из кода единицу.
  2.  Инвертировать код.
  3.  Интерпретировать полученный код как модуль отрицательного числа.

Например:

  1.  00010111. В старшем разряде 0, значит это положительное число, 23.
  2.  11000000. Число отрицательное:
    1.  Вычитаем единицу:   110000002 – 12 = 10111111
    2.  Инвертируем:           01000000
    3.  Получаем число:          - 64

Дополнительный код обладает важным преимуществом, связанным с тем, что вычитание чисел (A – B) эквивалентно сложению с вычитаемым, записанным в дополнительном коде (A + (-B)) что позволяет процессору поддерживать на уровне микроархитектуры только операцию сложения.

Представление вещественных чисел.

Вещественные числа в памяти представляются в форме с плавающей точкой – число (R) выражается в виде произведения мантиссы m на основание системы счисления p в целой степени n (порядок): R = m * pn.

 Поскольку в таком представлении одно и то же число можно записать в нескольких представлениях: R = m * pn  =  (m/p) * pn+1 = (m/p2) * pn+2…, в компьютерах используется нормализованное представление, в котором мантисса должна удовлетворять условию 0.1p < m < 1p, что означает, что мантисса меньше 1 и первая значащая цифра – не 0.

Как правило, числа с плавающей точкой хранятся в следующем формате: один разряд выделяется для хранения знака мантиссы. Некоторое количество разрядов (в зависимости от размерности типа данных) отводится под хранение порядка, как обычного целого числа со знаком. Остальные разряды используются для хранения нормализованной мантиссы. Из этого следует, что вещественное число не всегда представлено точным значением, поскольку даже точное десятичное число может не иметь соответствующего точного внутреннего представления. Например, может оказаться, что число 0.1 будет иметь ближайшее к нему внутреннее представление, соответствующее 0.9999999997 или 1.0000000001.

Представление символьных данных.

Символьные данные представляются в С++ на основе правила, по которому каждому печатному символу ставится в соответствие определенное число (код символа). Перечень всех возможных символов вместе с соответствующими ими кодами можно представить в виде таблицы символов. Наиболее часто используемая таблица такого типа, содержащая символы латинского алфавита, называется ASCII.

Каждый символ представляется одним байтом, способным хранить 256 различных значений. Для работы с символами используется базовый тип данных char. Поскольку char содержит целочисленное значение (код символа), то к нему применимы любые арифметические операции.


 

А также другие работы, которые могут Вас заинтересовать

636. Анализ структуры затрат на производство каркаса боковины автобуса 240 KB
  Оценка времени на изготовление партии деталей. Технологический маршрут обработки детали с указанием штучного времени, применяемого оборудования. Оценка предельно-необходимых затрат на автоматизацию. При использовании сварочного робота Nachi SH200 общие затраты на производство уменьшаются, несмотря на то, что амортизация, материальные и прочие расходы увеличились.
637. Государственные и муниципальные организации 130 KB
  Государственные организации как институт проведения политики государства. Механизм экономического государственного регулирования, поддержки и стимулирования предпринимательской деятельности. Функции властных структур в предпринимательской деятельности.
638. Уравновешивание механизмов и балансировка роторов 131.5 KB
  Понятие о неуравновешенности звена и механизма. Статическая, моментная и динамическая уравновешенности механической системы. Статическое уравновешивание рычажных механизмов. Метод замещающих масс. Полное и частичное статическое уравновешивание механизма. Ротор и виды его неуравновешенности: статическая и динамическая. Балансировка ротора.
639. Использование станка-качалки в процессе добычи нефти и газа 182 KB
  Процесс бурения включает крепление стенок скважин (как правило, глубоких) обсадными трубами с закачкой цементного раствора в кольцевой зазор между трубами и стенками скважин. Способы добычи нефти и газа
640. Организационное проектирование, оценка эффективности организационных систем 135 KB
  Основные методологические принципы построения организационных структур. Понятие экспертного метода, метода структуризации целей, метода организационного моделирования, метода аналогий. Этапы проектирования, эффективность организационных изменений.
641. Анализ использования трудовых ресурсов на предприятии 118 KB
  Анализ использования трудовых ресурсов ООО Каравай. Анализ использования трудовых ресурсов, направления анализа численности и состава рабочей силы. Мероприятия, направленные на улучшение использования трудовых ресурсов в ООО Каравай на 2012.
642. Виды отчетов и способы их составления программными средствами 124 KB
  В практике маркетинговых исследований существует три основных вида отчета: устный, письменный краткий и письменный подробный. Как правило, контракты предусматривают устный и один из видов письменных отчетов.
643. Тяговый расчет автомобиля ЗиЛ-133Г1 1017 KB
  Построение внешней скоростной характеристики двигателя Камаз-7401. Графики силы сопротивления качению колес автомобиля по дорожному покрытию. Определение силы сопротивления качению колес автомобиля по дорожному покрытию. Значения силы тяги на колесах и скорости автомобиля Зил-133Г1.
644. Теоретические основы налогового права 128 KB
  Дайте определение понятию налоговое право. Руководствуясь ст. 2 НК РФ, охарактеризуйте его предмет. Каким образом законодательство о налогах и сборах (ст. 45 НК РФ) определяет момент исполнения налогоплательщиком обязанности по уплате налогов и сборов. Каковы правовые последствия подачи налогоплательщиком жалобы.