Ответ
Да, все основные примитивные целочисленные типы в 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, чтобы все эти буквы-кракозябры хранить. Вот такая, блядь, хитрая жопа получилась!