
- •2. Арифметические основы микропроцессорной техники
- •2.1. Системы счисления
- •2.2. Перевод из одной системы счисления в другую
- •2.2.1. Перевод целого десятичного числа в двоичную систему счисления
- •2.2.4. Перевод целого двоичного числа в шестнадцатеричную систему счисления
- •2.2.5. Перевод целого шестнадцатеричного числа в двоичную систему счисления
- •2.2.6. Перевод целого шестнадцатеричного числа в десятичную систему счисления
- •2.2.7. Перевод дробного десятичного числа в двоичную систему счисления
- •2.2.8. Перевод дробного двоичного числа в десятичную систему счисления
- •2.3. Представление информации в вычислительно технике
- •2.3.1. Целые числа без знака (unsigned)
- •2.3.2. Целые числа со знаком (signed)
- •2.3.3. Числа с плавающей точкой (float)
- •2.3.4. Символьные данные (char)
- •2.3.5.2. Представление десятичного числа в двоично-десятичном неупакованном формате
- •2.3.5.3. Перевод bcd упакованного формата в десятичное число
- •2.3.5.4. Перевод bcd неупакованного формата в десятичное число
- •2.4. Арифметические операции
- •2.4.1. Арифметическое сложение
- •2.4.1.1. Арифметическое сложение двоичных чисел
- •2.4.1.2. Арифметическое сложение шестнадцатеричных чисел
- •2.4.2. Арифметическое вычитание
- •2.4.3. Арифметическое умножение
- •2.4.4. Арифметическое деление
- •2.5. Проверка результатов выполнения арифметических операций
2.3.1. Целые числа без знака (unsigned)
Целые числа без знака используются для представления только положительных чисел. Количество двоичных чисел, которые могут быть представлены с помощью n-разрядов равно 2n. Диапазон представления целых чисел без знака определяется как 0 … 2n-1, где n – длина разрядой сетки.
Табл.2.14. Диапазон целых чисел без знака
Тип данных |
Размер n, бит |
Диапазон 0 … 2n-1 |
|
Dec |
Hex |
||
unsigned (short) char |
8 |
0 … 255 |
00 … FF |
unsigned int |
16 |
0 … 65535 |
0000 … FFFF |
unsigned long |
32 |
0 … 4294967295 |
00000000 … FFFFFFFF |
Пример: Перевести целое десятичное число 12510 в двоичную систему счисления. Двоичное число записать восьмиразрядной и шестнадцатиразрядной сетках.
Перевод числа 12510 = 11111012.
Число 12510 входит в диапазон чисел 0 … 255 и 0 … 65535.
Ответ: 1. Для n=8 число 12510 = 0111 11012; 2. Для n=16 число 12510 = 0000 0000 0111 11012 (здесь и далее в записи двоичного числа используем пробел между тетрадами для контроля разрядности числа).
Пример: Перевести целое десятичное число 25610 в двоичную систему счисления. Двоичное число записать восьмиразрядной и шестнадцатиразрядной сетках.
Перевод числа: 25610 = 1 0000 00002.
Число 25610 не входит в диапазон чисел 0 … 255 и входит в диапазон чисел 0 … 65535.
Ответ: 1. Число 25610 нельзя представить в восьмиразрядной сетке, т.к. оно не входит в диапазон 0 … 255; 2. Для n=16 число 25610 = 0000 0001 0000 00002.
Пример: Определить знак двоичного числа 10000000000000002.
Ответ: Двоичное число является положительным, так как в формате без знака все числа положительные.
2.3.2. Целые числа со знаком (signed)
Целые числа со знаком используются для представления как положительных, так и отрицательных чисел. Диапазон представления целых чисел со знаком определяется как 2n-1 … 2n-1-1, где n – количество разрядов сетки.
Табл.2.15. Диапазон целых чисел со знаком
Тип данных |
Размер n, бит |
Диапазон 2n-1 … 2n-1-1 |
|
Dec |
Hex |
||
signed (short) char |
8 |
-128 … +127 |
00 … FF |
signed int |
16 |
-32 768 … +32 767 |
0000 … FFFF |
signed long |
32 |
-2 147 483 648 … +2 147 483 647 |
8000 0000 … 7FFF FFFF |
Для изображения знака числа в разрядной сетке используется старший (левый) разряд, в котором 0 соответствует положительному числу, 1 отрицательному. Для восьмиразрядной сетки знаковым является седьмой разряд, для шестнадцатиразрядной сетки знаковым является пятнадцатый разряд.
Табл. 2.15.1. Положительное двоичное восьмиразрядное число
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
Табл. 2.15.2. Отрицательное двоичное восьмиразрядное число
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
Для кодирования чисел со знаком в микропроцессорной технике применяется специальный двоичный дополнительный код, который обладает следующими свойствами:
Дополнительные коды положительных двоичных чисел формата signed определены в диапазоне 0 … 2n-1-1 и совпадают с двоичными кодами чисел формата unsigned, определенных в диапазоне 0 … 2n-1-1. Дополнительные коды положительных двоичных чисел получаются делением на 2.
Дополнительный код отрицательного двоичного числа определяется двумя способами:
По формуле Х10 = [2n + Х10]2 , где Х10 – отрицательные десятичные числа в диапазоне от (-1) до (-2n/2).
По правилу изменения знака двоичного числа в дополнительном коде:
2.2.1. Записать двоичное число в заданной разрядной сетке.
2.2.2. Заменить в двоичном числе все нули на единицы, а единицы на нули (поразрядная инверсия).
2.2.3. Полученное число сложить с единицей по правилам двоичной арифметики.
Данное правило может применяться для перехода от положительных двоичных чисел к отрицательным числам, и наоборот.
Изменение
знака шестнадцатеричного числа
выполняется в следующей последовательности:
1.
Выполнить поразрядную инверсию каждого
символа
по формуле [24
- 1 - Хi]16.
2.
Полученное шестнадцатеричное число
сложить с единицей по правилам двоичной
арифметики
.
Способ перевода двоичных чисел со знаком в десятичную систему счисления зависит от знака числа:
1. Целые положительные двоичные числа переводятся по формуле степенного ряда вида:
an-1рn-1 + an-2рn-2 + . . . + a1р1 + a0р0.
2. Целые отрицательные двоичные числа переводятся по формуле степенного ряда вида:
(-an-1)рn-1 + an-2рn-2 + . . . + a1р1 + a0р0, где (n-1) – старший разряд разрядной сетки.
Пример. Представить число +12510 в восьмиразрядной и шестнадцатиразрядной сетках.
Число +12510 входит в диапазон чисел (-128 … +127) и (-32768 … +32767).
Ответ: 1. Для n=8 число 12510 = 0111 11012; 2. Для n=16 число 12510 = 0000 0000 0111 11012.
Пример: Определить знак двоичного числа 0111 11012 в восьмиразрядной сетке.
Число 0111 11012 записано в восьмиразрядной сетке.
Ответ: Число 0111 11012 положительное, т.к. в старшем 7-ом знаковом разряде записан ноль.
Пример: Определить знак двоичного числа 0000 0000 0111 11012 в шестнадцатиразрядной сетке.
Число 0000 0000 0111 11012 записано в шестнадцатиразрядной сетке.
Ответ: Число 0000 0000 0111 11012 положительное, т.к. в старшем 15-ом знаковом разряде записан ноль.
Пример. Представить число -12510 в восьмиразрядной и шестнадцатиразрядной сетках.
Число -12510 входит в диапазон чисел (-128 … +127) и –(32768 … +32767).
Для n=8 d10 = -12510 = [28 -12510]2 = [256 -12510]2 =[13110]2 = 100000112.
Для n=16 d10 = -12510 = [216 -12510]2 = [65536 -12510]2 =[6541110]2 = 1111 1111 1000 00112.
Ответ: для n=8 -12510 = 1000 00112 ; для n=16 -12510 = 1111 1111 1000 00112.
Пример: Представить двоичное число 0111 11012 в десятичной системе счисления.
Для положительного числа используем формулу:
a7р7 + a6р6 + a5р5 + a4р4 + a3р3 + a2р2 + a1р1 + a0р0 = 0+64+32+16+8+4+0+1 = 12510.
Ответ: число 0111 11012 = +12510.
Пример: Представить двоичное число 0111 11012 в шестнадцатеричной системе счисления.
Ответ: число 0111 11012 = 7D16.
Пример: Определить знак шестнадцатеричного числа 7D 16.
Ответ: числа 7D16 положительное, т.к. в старшем разряде числа 7D16 цифра 716 = 01112, старший бит тетрады равен 02, что соответствует знаку плюс.
Пример: Изменить знак двоичного числа 111 11012 и записать число в восьмиразрядной сетке.
1. Записываем 111 11012 число в восьмиразрядной сетке 0111 11012.
2. Число 0111 11012 положительное, т.к. в старшем 7-ом знаковом разряде записан ноль.
2. Выполняем поразрядную инверсию 1000 00102.
3. Складываем число с единицей 1000 00102 + 0000 00012 = 1000 00112.
Ответ: полученное число 1000 00112 является отрицательным, т.к. в старшем 7-ом знаковом разряде записана единица.
Пример: Определить знак двоичного числа 1111 11012 в восьмиразрядной сетке.
Число 1111 11012 записано в восьмиразрядной сетке.
Ответ: Число 1111 11012 отрицательное, т.к. в старшем 7-ом знаковом разряде записана единица.
Пример: Определить знак двоичного числа 1000 0000 0111 11012 в шестнадцатиразрядной сетке.
Число 1000 0000 0111 11012 записано в шестнадцатиразрядной сетке.
Ответ: Число 1000 0000 0111 11012 отрицательное, т.к. в старшем 15-ом знаковом разряде записана единица.
Пример: Представить двоичное число 1000 00112 в десятичной системе счисления.
Для отрицательного числа используем формулу:
(-a7)р7 + a6р6 + a5р5 + a4р4 + a3р3 + a2р2 + a1р1 + a0р0 = -128+0+0+0+2+1 = -12510
Ответ: 1000 00112 = -12510.
Пример. Представить двоичное число 1000 00112 в шестнадцатеричной системе счисления.
Ответ: 1000 00112 = 8316.
Пример: Определить знак шестнадцатеричного числа 8316.
Ответ: число 8316 отрицательное, т.к. в старшем разряде числа 8316 цифра 816 = 10002, старший бит тетрады равен 12, что соответствует знаку минус.
Пример: Изменить знак двоичного числа 0111 11012 в шестнадцатиразрядной сетке.
1. Записываем 0111 11012 число в шестнадцатиразрядной сетке 0000 0000 0111 11012.
2. Выполняем поразрядную инверсию (заменяем все нули на единицы, а единицы - на нули) 1111 1111 1000 00102.
3. Складываем число с единицей
1111 1111 1000 00102 + 0000 0000 0000 00012 = 1111 1111 1000 00112.
Ответ: число 1111 1111 1000 00112.
Пример: Определить знак двоичного числа 1111 1111 1000 00112.
Двоичное число 1111 1111 1000 00112 записано в шестнадцатиразрядной сетке.
Ответ: Число 1111 1111 1000 00112 отрицательное, т.к. в старшем 15-ом знаковом разряде записана единица.
Пример: Представить двоичное число 1111 1111 1000 00112 в десятичной системе счисления.
Для отрицательного числа используем формулу:
(-a15)р15+a14р14+a13р13+a12р12+a11р11+a10р10+a9р9+a8р8+a7р7+a6р6+a5р5+a4р4+a3р3+a2р2
+a1р1+a0р0= = -32768+16384+8192+4096+2048+1024+512+256+128+0+0+0+2+1 = -12510
Ответ: 1111 1111 1000 00112 = -12510.
Пример: Представить двоичное число 1111 1111 1000 00112 в шестнадцатеричной системе счисления.
Ответ: 1111 1111 1000 00112 = FF8316
Пример: Определить знак шестнадцатеричного числа FF8316.
Ответ: числа FF8316 отрицательное, т.к. в старшем разряде символа F16 = 11112 старший бит тетрады равен 12.
Пример. Представить шестнадцатеричное число 7D16 в двоичной системе счисления.
Ответ: 7D16 = 0111 11012.
Пример. Представить шестнадцатеричное число 7D16 в десятичной системе счисления.
Число 7D 16 положительное, поэтому можно применить формулу степенного ряда: a1р1+a0р0.
7D 16 = (7)10 (13)10= 716р1+1316р0 = 112 +13 = 12510.
Ответ: 7D16 = +12510.
Пример. Представить шестнадцатеричное число 8316 в двоичной системе счисления.
Ответ: 7D16 = 1000 00112.
Пример. Представить шестнадцатеричное число 8316 в десятичной системе счисления.
Число 8316 отрицательное, поэтому сначала нужно перевести в двоичную систему счисления и перевести по формуле (-a7)р7 + a6р6 + a5р5 + a4р4 + a3р3 + a2р2 + a1р1 + a0р0.
8316 = 1000 00112 = -128 + 2 +1 = -12510.
Ответ: 8316 = -12510.