Восьмеричная система счисления
Понимание основания 8
Узнать о восьмеричной системеВосьмеричная система (основание 8) служит мостом между двоичным кодом и удобочитаемым представлением. Хотя шестнадцатеричная система в значительной степени заменила её в современных вычислениях, восьмеричная остаётся важной для прав доступа к файлам в Unix и в некоторых программных контекстах. Понимание восьмеричной системы даёт представление о проектировании систем счисления и истории вычислительной техники.
Как работает восьмеричная система
Позиционные значения
Каждая позиция — это степень числа 8:
- ...512, 64, 8, 1 (8³, 8², 8¹, 8⁰)
Пример: 752 (восьмеричное)
- 7 × 64 = 448
- 5 × 8 = 40
- 2 × 1 = 2
- Итого = 490 (десятичное)
Почему только 0–7?
Когда достигается 8, происходит перенос в следующий разряд:
- Десятичное 7 = 7 восьмеричное
- Десятичное 8 = 10 восьмеричное
- Десятичное 9 = 11 восьмеричное
Сравнение восьмеричной и десятичной систем
| Десятичное | Восьмеричное | Двоичное |
|---|---|---|
| 0 | 0 | 000 |
| 5 | 5 | 101 |
| 7 | 7 | 111 |
| 8 | 10 | 1000 |
| 10 | 12 | 1010 |
| 16 | 20 | 10000 |
| 64 | 100 | 1000000 |
| 100 | 144 | 1100100 |
| 255 | 377 | 11111111 |
| 512 | 1000 | 1000000000 |
Восьмеричная и двоичная системы
Ключевая связь: каждая восьмеричная цифра соответствует ровно 3 двоичным разрядам.
Из восьмеричной в двоичную
Преобразуйте каждую цифру в 3 бита:
- 0 = 000, 1 = 001, 2 = 010, 3 = 011
- 4 = 100, 5 = 101, 6 = 110, 7 = 111
Пример: 752 (восьмеричное) в двоичную
- 7 = 111
- 5 = 101
- 2 = 010
- Результат: 111101010
Из двоичной в восьмеричную
Сгруппируйте биты по три справа:
- 111101010 → 111 | 101 | 010 → 7 5 2
Восьмеричная система в правах доступа Unix
Наиболее распространённое современное применение восьмеричной системы — права доступа к файлам в Unix/Linux.
Биты прав доступа
- r (чтение): 4
- w (запись): 2
- x (исполнение): 1
Три категории
- Владелец: первая цифра
- Группа: вторая цифра
- Остальные: третья цифра
Распространённые права доступа
| Восьмеричное | Значение | Символ |
|---|---|---|
| 755 | Владелец: всё, Остальные: чтение+исполнение | rwxr-xr-x |
| 644 | Владелец: чтение+запись, Остальные: чтение | rw-r--r-- |
| 777 | Все: все права | rwxrwxrwx |
| 600 | Только владелец: чтение+запись | rw------- |
История: почему восьмеричная?
Ранняя вычислительная техника
- Некоторые ранние компьютеры использовали 12-, 24- или 36-битные слова
- Эти числа делятся нацело на 3
- Восьмеричная давала аккуратное представление
- PDP-8 (12-бит) и PDP-10 (36-бит) активно использовали восьмеричную систему
Переход к шестнадцатеричной
- 8-битные байты стали стандартом (IBM 360)
- 8 бит = 2 HEX-цифры (идеальное соответствие)
- 8 бит = 2,67 восьмеричных цифры (неудобно)
- Шестнадцатеричная победила для большинства задач
Восьмеричная система в программировании
Запись
- C/C++/JavaScript: ведущий 0 (опасно!)
- Python 3: префикс 0o (понятно)
- Некоторые языки: 0o или @
Опасность ведущих нулей
В C и JavaScript:
010= 8 (восьмеричное!), а не 100777= 511 (часто используется для прав доступа)
Это вызывает ошибки, когда люди случайно пишут 010, ожидая десятичное число 10.
Современная практика
- Python 3 требует явный префикс 0o
- Многие руководства по стилю не рекомендуют неявную восьмеричную запись
- Восьмеричные литералы в основном используются для прав доступа к файлам
Преобразование десятичного числа в восьмеричное
Метод: последовательное деление на 8
- Делите на 8, записывайте остаток
- Делите частное на 8, записывайте остаток
- Повторяйте, пока частное не станет 0
- Прочитайте остатки снизу вверх
Пример: 500 (десятичное) в восьмеричное
| Деление | Частное | Остаток |
|---|---|---|
| 500 ÷ 8 | 62 | 4 |
| 62 ÷ 8 | 7 | 6 |
| 7 ÷ 8 | 0 | 7 |
Результат: 764 (восьмеричное)
Заключение
Восьмеричная система (основание 8) была исторически важна в вычислительной технике, когда размеры слов были кратны 3 битам. Хотя шестнадцатеричная система в значительной степени заменила её для общего использования, восьмеричная остаётся незаменимой для прав доступа к файлам в Unix и иногда встречается в устаревших системах. Ключевое свойство — каждая восьмеричная цифра представляет ровно 3 двоичных бита, что делает преобразование простым. Понимание восьмеричной системы помогает при работе с Unix-системами, чтении устаревшего кода и изучении истории вычислительной техники.