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 содержит целочисленное значение (код символа), то к нему применимы любые арифметические операции.


 

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

38905. ИССЛЕДОВАНИЕ УПРУГОГО УДАРА 1.5 MB
  Лаборатория Физические основы механики ЛАБОРАТОРНАЯ РАБОТА № ФМ5 А ИССЛЕДОВАНИЕ УПРУГОГО УДАРА Методическое руководство подготовлено: к. Удар называется центральным если в момент удара центры инерции сталкивающихся тел находятся на одной прямой. Различают два предельных случая удара – абсолютно упругий и абсолютно неупругий. После удара столкнувшиеся тела движутся вместе с одинаковой скоростью.
38906. ИЗУЧЕНИЕ ДВИЖЕНИЯ ТЕЛА ОТНОСИТЕЛЬНО ГЛАВНЫХ ОСЕЙ ИНЕРЦИИ 2.74 MB
  Лаборатория Физические основы механики ЛАБОРАТОРНАЯ РАБОТА № ФМ6 ИЗУЧЕНИЕ ДВИЖЕНИЯ ТЕЛА ОТНОСИТЕЛЬНО ГЛАВНЫХ ОСЕЙ ИНЕРЦИИ Составитель: к. ЦЕЛЬ РАБОТЫ: определение периодов колебаний и моментов инерции тел относительно главных осей инерции. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ Моментом инерции тела относительно некоторой оси в физике называют величину равную сумме произведений элементарных масс из которых состоит тело на квадраты их расстояний до оси: Проекция момента импульса тела на ось вращения и угловую скорость связаны...
38907. Знакомство с методами измерения физических величин и оценкой погрешностей измерений 264.5 KB
  Лаборатория Физические основы механики ЛАБОРАТОРНАЯ РАБОТА № ФМ0 Знакомство с методами измерения физических величин и оценкой погрешностей измерений Руководство подготовлено доц. ЦЕЛЬ РАБОТЫ: Ознакомиться с прямыми и косвенными измерениями методами обработки результатов измерений. Чтобы найти значение как можно более близкое к истинному нужно проводить большее число измерений и на их основе вычислить среднее арифметическое значение. Чем больше число измерений тем ближе среднее значение к истинному.
38908. ОПРЕДЕЛЕНИЕ МОМЕНТА ИНЕРЦИИ ТЕЛА МЕТОДОМ КРУТИЛЬНЫХ КОЛЕБАНИЙ 612.5 KB
  Лаборатория Физические основы механики ЛАБОРАТОРНАЯ РАБОТА № ФМ1 ОПРЕДЕЛЕНИЕ МОМЕНТА ИНЕРЦИИ ТЕЛА МЕТОДОМ КРУТИЛЬНЫХ КОЛЕБАНИЙ Нормоконтроль: Переработано: к. ЦЕЛЬ РАБОТЫ: изучение вращательного движения тела на примере крутильных колебаний. Определение момента инерции твердого тела. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ Абсолютно твёрдым телом называется тело которое ни при каких условиях не может деформироваться то есть расстояние между двумя точками или точнее между двумя частицами этого тела остаётся постоянным.
38909. Изучение прецессии лабораторного гироскопа 4.27 MB
  Окружности по которым движутся точки тела лежат в плоскостях перпендикулярных к этой оси. Эти векторы не имеют определённых точек приложения: они могут откладываться из любой точки оси вращения. Вектор направлен вдоль оси вращения в соответствии с правилом правого винта т. При вращении тела вокруг неподвижной оси вектор углового ускорения направлен вдоль оси вращения в сторону...
38910. Исследование законов вращательного движения на маятнике Обербека 1.08 MB
  ЦЕЛЬ РАБОТЫ: расчет момента инерции сложного тела исследование зависимости момента инерции от распределения массы внутри твердого тела от величины внешней силы и от ее плеча. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ Абсолютно твёрдым телом называется тело которое ни при каких условиях не может деформироваться то есть расстояние между двумя точками или точнее между двумя частицами этого тела остаётся постоянным. При вращении твёрдого тела все его точки движутся по окружности центры которых лежат на одной прямой называемой...