Хранение целых чисел в памяти компьютера

Прежде всего, чтобы понять, как компьютер хранит целые числа в памяти, мы должны понять двоичные числа. Почему? Потому что компьютер не может хранить числа так, как знают люди. Компьютеры считывают и записывают только 2 значения: on и off, которые можно интерпретировать как 1 и 0.

Двоичные числа:
Двоичные числа создаются в системе счисления 2. Это означает, что для представления чисел используются только 2 символа. Например, числа, которые всем известны, имеют основание 10, потому что от 0 до 9 — это 10 символов. Итак, как мы представляем число с основанием 10 в числах с основанием 2 (двоичные)?. Мы должны использовать математику!

Правило простое: так как мы находимся в базе 2, мы должны разделить на два число, которое мы хотим преобразовать, сохранить напоминание (даже 0) и продолжить деление до 0, вот так:

Предположим, нам нужно 28 int binary:
1. 28/2 = 14; напоминание: 0
2. 14/2 = 7; напоминание: 0
3. 7/2 = 3; напоминание: 1
4. 3/2 = 1; напоминание: 1
5. 1/2 = 0; напоминание: 1
Теперь мы строим наше двоичное число с напоминаниями, начиная с последнего числа (5.) и заканчивая первым: Результат = 11100.

Но как нам преобразовать двоичное число в десятичное? С большим количеством математики!. Правило тоже простое: взяв то же самое число, которое мы только что преобразовали, мы должны умножить каждую цифру двоичного числа, начиная с последней, на 2^p, где p — позиция цифры. Затем добавьте все эти результаты. На примере мы можем видеть лучше:

1*2⁴ + 1*2³ + 1*2² + 0*2¹ + 0*2⁰
16 + 8 + 4 + 0 + 0 = 28

Просто!, просто мы должны помнить, что любое число в степени 0 равно 1, а не 0.

Теперь мы знаем, как работают двоичные числа, как они используются в компьютере? Цифра 1 и 0 называется бит. С 4 битами мы можем представить 16 различных чисел, а с 8 битами мы можем представить 256 различных чисел, и это называется байтом, но это тема для другого блога. Обычные целые числа хранятся в 4 байтах, но для этого примера мы работаем с 4 байтами, 16 комбинациями.

Дополнение до двух и отрицательные числа:
Теперь мы знаем, как представлять десятичное число в двоичном формате, но как насчет отрицательных? Для этого вопроса мы используем два дополнения. Работает следующим образом:

С числом 6, представленным в двоичном виде как 0110, необходимо выполнить следующие шаги:
1. Найти не числа, представленного знаком «~». Также называется унарным дополнением. Это вычисляется просто заменой каждой цифры двоичного числа, например, 1 меняется на 0, а 0 на 1. С нашим числом результат: ~(0110) = 1001.
2. Добавьте 1 к результат. Мы просто делаем математическое сложение с нашим числом:
1001 + 0001 = 1010
Хитрость в этой операции заключается в том, что 1 + 1 это 0, но мы передаем 1 следующей цифре, как в десятичных сложениях, когда мы складываем, например, 5 + 5, это 0 и добавляем 1 к следующей цифре (см. пример ниже).

Таким образом, представление 6 равно 0110, а отрицательное число -6 задается как 1010. Помните, что для 4 бит, которые могут представлять только 16 чисел, по этой причине мы представляем только максимальное положительное число как 7, и минимальное число как -8, так как отрицательное значение 0 не существует. Для 8 бит (1 байт) мы можем представить 127 положительных чисел и -127 отрицательных чисел.

Еще примеры с 1 байтом:

78 в двоичном формате:
1. 78/2 = 39; напоминание: 0
2. 39/2 = 19; напоминание: 1
3. 19/2 = 9; напоминание: 1
4. 9/2 = 4; напоминание: 1
5. 4/2 = 2; напоминание: 0
6. 2/2 = 1; остаток: 0
7. 1/2 = 0; остаток: 1
Результат: 01001110 (первый 0 это представление в 8 битах)

00110101 в десятичном виде:
1*2⁵+ 1*2⁴ + 0*2³ + 1*2² + 0*2¹ + 1*2⁰
32 + 16 + 0+ 4 + 0 + 1= 53

Отрицательное число 00110101:
~(00110101) = 11001010
11001010 + 00000001 = 11001011
Отрицательное число 01001110:
~(01001110) = 10110001
11001010 + 1001010 + = 11001011

дополнение гиперфизики-2
Вики