blob: 71ffc3a729cabacf9731d7bed5747182a6fa6446 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
---
id: vjh3dj
date: 2026-07-20T09:11:10+0300
languages: [ru]
aliases:
reviews:
tags:
- draft
- knowledge
---
# Машинные коды чисел
Для представления знаковых чисел используются специальные способы кодирования, называемые машинными
кодами. Основная проблема, которую они решают - как записать знак числа?
Обычно старший бит используется как знаковый разряд. Однако возникают различные варианты кодирования
цифровой части числа.
1. Прямой код
Вариант, при котором старший разряд хранит знак, а оставшиеся - число без каких-либо изменений.
7 = 0.111
-5 = 1.101
Способ является максимально простым для записи и восприятия человеком, однако обладает недостатком -
для выполнения арифметических операций необходимо дополнительно обрабатывать знаковые разряды для
получения правильного ответа.
Этот недостаток сильно усложняет реализацию сумматоров, однако не сильно влияет на мультипликаторы и
делители.
Также недостатком является наличие двух нулей: +0 и -0.
2. Обратный код
Вариант, при котором все биты числа инвертируются, если оно является отрицательным. Если число
положительное, оно записывается без изменений.
7 = 0.111
-5 = 1.010
Этот способ позволяет не смотреть на знаковый разряд для выполнения суммы. Однако данный код требует
следить за переполнением знакового разряда в ходе сложения - переполнение является коррекцией при
смене знака.
Также недостатком является наличие двух нулей: +0 и -0.
3. Дополнительный код
Наиболее распространённый способ хранения отрицательных чисел в современных компьютерах.
Если число положительное - его код записывается без изменения.
Если число отрицательное - инвертируются его биты и к ним прибавляется 1.
7 = 0.111
-5 = 1.011
В этом коде наблюдается только один ноль: +0 = -0.
Сложение в этом коде происходит без каких-либо коррекций и обработок знаковых разрядов - числа
складываются словно беззнаковые.
4. Модифицированный код
Вариант является модификацией дополнительного кода - он имеет два разряда под знак:
- если число положительное: знак 00
- если число отрицательное: знак 11
Эта модификация выполнена для определения переполнений при выполнении арифметических операций. Если
переполнения не имеется - знак результата обязан быть 00 или 11. Если же переполнение произошло,
знак будет 01 или 10 в зависимости от того, в какую сторону произошло переполнение.
## Up
- [Системы счисления](o6cxpv)
## Related
- [Двоичное кодирование числовых данных](zk1p84)
- [Двоичная арифметика](86uwkq)
|