← Назад к вопросам

В каком формате числа хранятся в двоичной системе

1.2 Junior🔥 71 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Форматы хранения чисел в двоичной системе

Основы двоичного представления

Все числа в компьютере хранятся в двоичной системе (база 2) с использованием битов (0 и 1).

1. Целые числа

Беззнаковые целые (Unsigned)

Десятичное    Двоичное
0              00000000
1              00000001
5              00000101
255            11111111

Для 8-битного беззнакового: 0 до 255

Знаковые целые (Signed) — дополнительный код

Это стандарт в Java и большинстве языков:

Десятичное    Дополнительный код (8 бит)
+127           01111111
+5             00000101
+0             00000000
-1             11111111
-5             11111011
-128           10000000

Правило для -X: инверсия(X) + 1

2. Типы данных в Java

byte (8 бит, знаковый)

byte max = 127;    // 01111111
byte min = -128;   // 10000000
byte negOne = -1;  // 11111111

String binary = Integer.toBinaryString(127 & 0xFF);

short (16 бит, знаковый)

short max = 32767;      // 0111111111111111
short min = -32768;     // 1000000000000000

int (32 бита, знаковый)

int max = 2147483647;   // 01111111...111111
int min = -2147483648;  // 10000000...000000

String binary = Integer.toBinaryString(42);  // 101010

long (64 бита, знаковый)

long max = 9223372036854775807L;
long min = -9223372036854775808L;

3. Числа с плавающей точкой

float (32 бита) — IEEE 754

Структура:
[знак: 1][экспонента: 8][мантисса: 23]

Пример: 5.5
5 = 101, 0.5 = 0.1
5.5 = 1.011 * 2^2
float f = 5.5f;
int bits = Float.floatToIntBits(f);
String binary = Integer.toBinaryString(bits);

double (64 бита) — IEEE 754

Структура:
[знак: 1][экспонента: 11][мантисса: 52]
double d = 5.5;
long bits = Double.doubleToLongBits(d);

4. Побитовые операции

int a = 5;    // 0000 0101
int b = 3;    // 0000 0011

int and = a & b;     // 0000 0001 = 1
int or = a | b;      // 0000 0111 = 7
int xor = a ^ b;     // 0000 0110 = 6
int not = ~a;        // 1111 1010 = -6

int leftShift = a << 1;    // 0000 1010 = 10
int rightShift = a >> 1;   // 0000 0010 = 2

5. Проверка битов

int num = 5;  // 0000 0101

// Проверка наличия бита
boolean hasBit0 = (num & (1 << 0)) != 0;  // true
boolean hasBit1 = (num & (1 << 1)) != 0;  // false

// Установка бита
int setBit = num | (1 << 1);  // 0000 0111 = 7

// Удаление бита
int clearBit = num & ~(1 << 0);  // 0000 0100 = 4

// Инверсия бита
int toggleBit = num ^ (1 << 1);  // 0000 0111 = 7

6. Специальные значения IEEE 754

float posInf = Float.POSITIVE_INFINITY;
float negInf = Float.NEGATIVE_INFINITY;
float nan = Float.NaN;

float x = 1.0f / 0.0f;  // Infinity
System.out.println(Float.isInfinite(x));  // true
System.out.println(Float.isNaN(x));       // false

7. Важные моменты

// Дополнительный код эффективно представляет отрицательные
int negOne = -1;  // все единицы в двоичном

// Переполнение
int max = Integer.MAX_VALUE;
int overflow = max + 1;  // переполнение: становится минусом

// Потеря точности с float
float f = 0.1f + 0.2f;  // 0.30000004 вместо 0.3
double d = 0.1 + 0.2;   // 0.30000000000000004

Заключение

Целые числа в Java хранятся в дополнительном коде (Two Complement), что позволяет эффективно представлять положительные и отрицательные значения. Числа с плавающей точкой используют стандарт IEEE 754 с отдельными полями для знака, экспоненты и мантиссы. Побитовые операции позволяют работать с отдельными битами для оптимизации и специализированных вычислений.

В каком формате числа хранятся в двоичной системе | PrepBro