Являются ли примитивные целочисленные типы в Java знаковыми?

Ответ

Да, все основные примитивные целочисленные типы в Java (byte, short, int, long) являются знаковыми (signed). Они используют представление в дополнительном коде (two's complement) и могут хранить как положительные, так и отрицательные значения.

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

Тип Размер Диапазон (от ... до)
byte 8 бит -128 ... 127
short 16 бит -32,768 ... 32,767
int 32 бит -2³¹ ... 2³¹-1 (примерно ±2.14 млрд)
long 64 бит -2⁶³ ... 2⁶³-1

Пример:

int positive = 2_147_483_647; // Integer.MAX_VALUE
int negative = -2_147_483_648; // Integer.MIN_VALUE

Особенности и работа с беззнаковыми значениями:

  • Беззнаковая арифметика: В Java нет беззнаковых (unsigned) примитивных типов. Однако, начиная с Java 8, в классы-обёртки добавлены статические методы для интерпретации значений как беззнаковых.

    // Чтение беззнакового значения из строки
    int unsignedInt = Integer.parseUnsignedInt("4294967295");
    // Сравнение двух int как беззнаковых чисел
    int result = Integer.compareUnsigned(a, b);
  • Исключение — char: Тип char является единственным 16-битным беззнаковым целочисленным типом в Java. Его диапазон: от 0 до 65535 (u0000 до uffff). Он предназначен для хранения символов Unicode.

Ответ 18+ 🔞

Ну ты посмотри, какие у нас тут дела творятся! Всё в Java, блядь, со знаком ходят, эти целочисленные типы — byte, short, int, long. Все как один, сука, знаковые, в дополнительном коде, могут и плюс, и минус таскать. Прям как жизнь — и радость, и печаль, блядь.

Вот смотри, табличка, чтобы не еб*ть мозги:

Тип Размер Что влезет (от и до)
byte 8 бит -128 ... 127 (маловато будет, но для мелких дел сойдёт)
short 16 бит -32,768 ... 32,767
int 32 бита -2³¹ ... 2³¹-1 (это типа ±2.14 миллиарда, овердохуища!)
long 64 бита -2⁶³ ... 2⁶³-1 (тут уже пизд*ц как много)

Примерчик для наглядности, ёпта:

int positive = 2_147_483_647; // Integer.MAX_VALUE — потолок!
int negative = -2_147_483_648; // Integer.MIN_VALUE — пол, блядь!

А теперь, сука, самое интересное — про беззнаковость!

Вот в чём парадокс, блядь: в Java нет нативных беззнаковых типов, как в том же C++. Все они со знаком, как будто с похмелья. Но! Начиная с Java 8, умные дядьки добавили в классы-обёртки статические методы, чтобы можно было притвориться, что число беззнаковое. Чистая иллюзия, но работает!

// Прочитаем число так, будто у него знака нет, чистая арифметика!
int unsignedInt = Integer.parseUnsignedInt("4294967295");
// Сравним два int'а, делая вид, что они оба только положительные
int result = Integer.compareUnsigned(a, b);

И единственное исключение, ядрёна вошь!

Тип char — он особенный, блядь. Единственный 16-битный беззнаковый целочисленный тип во всём этом царстве. От 0 до 65535 (u0000 до uffff). Он не для чисел, а для символов Unicode, чтобы все эти буквы-кракозябры хранить. Вот такая, блядь, хитрая жопа получилась!