Какие системы счисления используются в компьютерах? <!-- grade: junior -->
Система счисления — это способ записи чисел с помощью определённого набора цифр и правил. В компьютерах используются три основные системы: двоичная (base-2), шестнадцатеричная (base-16) и десятичная (base-10).
Двоичная (Binary, base-2)
- Цифры:
0и1. - Фундаментальная система для компьютеров, так как электронные компоненты имеют два состояния (есть ток / нет тока, высокое / низкое напряжение).
- Префикс в Java:
0b— например,0b1010= 10. - 1 бит = одна двоичная цифра, 1 байт = 8 бит.
Пример
Двоичное Десятичное
0b0001 1
0b0010 2
0b0100 4
0b1000 8
0b1010 10
0b11111111 255
Шестнадцатеричная (Hexadecimal, base-16)
- Цифры:
0-9иA-F(A=10, B=11, …, F=15). - Компактная запись двоичных данных: каждая hex-цифра = 4 бита (полубайт / nibble).
- Префикс в Java:
0x— например,0xFF= 255. - Широко используется для: адресов памяти, цветов в CSS (
#FF0000), MAC-адресов, UUID.
Пример
Hex Двоичное Десятичное
0x0A 0000 1010 10
0xFF 1111 1111 255
0x1F4 0001 1111 0100 500
Десятичная (Decimal, base-10)
Привычная человеку система, используется в исходном коде и выводе для пользователя.
Перевод между системами в Java
Пример
int x = 42;
Integer.toBinaryString(x); // "101010"
Integer.toHexString(x); // "2a"
Integer.toOctalString(x); // "52"
Integer.parseInt("101010", 2); // 42
Integer.parseInt("2a", 16); // 42
Представление отрицательных чисел — дополнительный код (two’s complement)
- Старший бит — знаковый (0 = положительное, 1 = отрицательное).
- Для получения отрицательного числа: инвертировать все биты и прибавить 1.
- Пример (8 бит): -1 =
1111 1111, -128 =1000 0000. - Для
int(32 бита) в Java: диапазон от -2^31 (-2 147 483 648) до 2^31 - 1 (2 147 483 647).
Восьмеричная (Octal, base-8)
Стоит упомянуть восьмеричную систему: она используется в Unix для прав доступа к файлам (chmod 755). Префикс в Java: 0 — например, 0755 = 493. Будьте осторожны: int x = 010; — это не 10, а 8 (восьмеричный литерал).
Вывод
Двоичная система — основа работы аппаратуры, шестнадцатеричная — удобная компактная запись двоичных данных, десятичная — для человека. Java-разработчику важно уметь переводить между системами и понимать представление отрицательных чисел в дополнительном коде.
На собеседовании: junior-вопрос. Будьте готовы перевести число из двоичной в hex и обратно вручную (каждые 4 бита = 1 hex-цифра). Частая ловушка:
int x = 010;— это 8, а не 10.