summaryrefslogtreecommitdiff
path: root/vjh3dj.md
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)