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

Как может храниться байт с точки зрения чисел

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

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

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

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

Как может храниться байт с точки зрения чисел

Что такое байт

Байт — это единица данных, состоящая из 8 бит. Каждый бит может быть 0 или 1. Соответственно, байт может иметь 2^8 = 256 различных значений.

Диапазон значений

В зависимости от интерпретации, байт может представлять разные диапазоны чисел:

1. Беззнаковый байт (unsigned byte)

Диапазон: 0 до 255 (256 значений)

// Java не имеет встроенного unsigned byte, но можно использовать:
int unsignedByte = 255;  // максимальное значение
int anotherByte = 0;     // минимальное значение

Представление некоторых значений:

  • 0 → 00000000 (двоичное)
  • 1 → 00000001
  • 127 → 01111111
  • 255 → 11111111

2. Знаковый байт (signed byte)

В Java тип byte это знаковый байт.

Диапазон: -128 до 127 (256 значений)

byte maxByte = 127;   // максимальное положительное значение
byte minByte = -128;  // минимальное отрицательное значение
byte zero = 0;        // ноль

Представление отрицательных чисел: дополнительный код

Отрицательные числа представляются в формате два дополнения (two's complement):

// Пример: как представлены отрицательные числа
// -1: представляется как 11111111
byte b = -1;
System.out.println(b);  // Выведет -1

Таблица представления значений

Двоичное    Беззнаковое    Знаковое
00000000    0              0
00000001    1              1
01111111    127            127
10000000    128            -128
11111111    255            -1

Основное отличие: самый левый (старший) бит используется как знаковый бит:

  • 0 → положительное число
  • 1 → отрицательное число

Практические примеры в Java

Преобразование между знаковым и беззнаковым

// Получить беззнаковое значение из знакового byte
byte signedByte = -1;
int unsignedValue = signedByte & 0xFF;  // Результат: 255
System.out.println(unsignedValue);      // 255

// Получить знаковое значение из числа
int value = 255;
byte signedByte = (byte) value;  // Результат: -1
System.out.println(signedByte);  // -1

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

byte b = 5;          // 00000101
System.out.println(b << 1);      // 10 - сдвиг влево
System.out.println(b >> 1);      // 2 - арифметический сдвиг вправо
System.out.println(b & 3);       // 1 - побитовое И
System.out.println(b | 8);       // 13 - побитовое ИЛИ
System.out.println(b ^ 7);       // 2 - побитовое исключающее ИЛИ
System.out.println(~b);          // -6 - побитовое отрицание

Хранение в памяти

Независимо от того, знаковый это байт или беззнаковый, в памяти хранится ровно 8 бит информации. Интерпретация этих 8 бит зависит от контекста:

public class ByteStorage {
    public static void main(String[] args) {
        byte b1 = 127;     // Положительное число
        byte b2 = -1;      // Отрицательное число
        
        // В памяти они хранятся так:
        // b1: 01111111
        // b2: 11111111
        
        System.out.println("b1 как signed: " + b1);           // 127
        System.out.println("b1 как unsigned: " + (b1 & 0xFF)); // 127
        
        System.out.println("b2 как signed: " + b2);           // -1
        System.out.println("b2 как unsigned: " + (b2 & 0xFF)); // 255
    }
}

Шестнадцатеричное представление

Байты часто представляют в шестнадцатеричном формате (HEX), так как 1 байт = 2 символа HEX:

byte b = 255;
System.out.println("HEX: " + Integer.toHexString(b & 0xFF));  // ff
System.out.println("0x" + String.format("%02X", b & 0xFF));   // 0xFF

Ключевые моменты

  1. В Java byte всегда знаковый — от -128 до 127
  2. Используйте маску & 0xFF для получения беззнакового значения
  3. Два дополнения — стандартный способ представления отрицательных чисел
  4. В памяти всегда 8 бит — интерпретация зависит от контекста
  5. Побитовые операции работают независимо от знака
  6. При переполнении значение оборачивается
Как может храниться байт с точки зрения чисел | PrepBro