История изменений
Исправление
Legioner,
(текущая версия)
:
организовать массив в 200 элементов типа byte с помощью типа byte
byte[] arr = new byte[Byte.toUnsignedInt(i)];
не, не понимаю
Грубо говоря - 0..127 signed соответствуют 0..127 unsigned. -128 signed соответствует 128 unsigned. -127 signed соответствует 129 unsigned и т.д.
Просто у меня возник вопрос «почему?». Если я хочу оперировать массивом беззнаковых элементов до 220, то логичней использовать один байт на элемент(для JVM, 36-и битное представление байта для других архитектур не рассматриваем), так?
Так. Оперируй, используй. Проблем не будет.
Даже вопрос в другом: с каких соображений (критериев) в Java отсутствуют беззнаковые типы? Безопасность?
Лыко-мочало, начинаем сначала. С каких соображений по умолчанию в Java целочисленные типы трактуются как signed? Видимо потому, что в подавляющем большинстве случаев нужны именно signed типы. Для unsigned операций в стандартной библиотеке есть все нужные функции.
Всё отличие между signed и unsigned byte/short/int/long это операции toString, fromString, •, / и преобразования между типами разной размерности. По умолчанию в Java они действительно считаются, как signed. Но есть набор функций для каждого примитивного типа, который позволяет их трактовать, как unsigned.
На уровне компьютера signed и unsigned byte это одни и те же 8 битов.
Исправление
Legioner,
:
организовать массив в 200 элементов типа byte с помощью типа byte
byte[] arr = new byte[Byte.toUnsignedInt(i)];
не, не понимаю
Грубо говоря - 0..127 signed соответствуют 0..127 unsigned. -128 signed соответствует 128 unsigned. -127 signed соответствует 129 unsigned и т.д.
Просто у меня возник вопрос «почему?». Если я хочу оперировать массивом беззнаковых элементов до 220, то логичней использовать один байт на элемент(для JVM, 36-и битное представление байта для других архитектур не рассматриваем), так?
Так. Оперируй, используй. Проблем не будет.
Даже вопрос в другом: с каких соображений (критериев) в Java отсутствуют беззнаковые типы? Безопасность?
Лыко-мочало, начинаем сначала. С каких соображений по умолчанию в Java целочисленные типы трактуются как signed? Видимо потому, что в подавляющем большинстве случаев нужны именно signed типы. Для unsigned операций в стандартной библиотеке есть все нужные функции.
Всё отличие между signed и unsigned byte/short/int/long это операции toString, fromString, •, / и неявные преобразования. По умолчанию в Java они действительно считаются, как signed. Но есть набор функций для каждого примитивного типа, который позволяет их трактовать, как unsigned.
На уровне компьютера signed и unsigned byte это одни и те же 8 битов.
Исправление
Legioner,
:
организовать массив в 200 элементов типа byte с помощью типа byte
byte[] arr = new byte[Byte.toUnsignedInt(i)];
не, не понимаю
Грубо говоря - 0..127 signed соответствуют 0..127 unsigned. -128 signed соответствует 128 unsigned. -127 signed соответствует 129 unsigned и т.д.
Просто у меня возник вопрос «почему?». Если я хочу оперировать массивом беззнаковых элементов до 220, то логичней использовать один байт на элемент(для JVM, 36-и битное представление байта для других архитектур не рассматриваем), так?
Так. Оперируй, используй. Проблем не будет.
Даже вопрос в другом: с каких соображений (критериев) в Java отсутствуют беззнаковые типы? Безопасность?
Лыко-мочало, начинаем сначала. С каких соображений по умолчанию в Java целочисленные типы трактуются как signed? Видимо потому, что в подавляющем большинстве случаев нужны именно signed типы. Для unsigned операций в стандартной библиотеке есть все нужные функции.
Исходная версия
Legioner,
:
организовать массив в 200 элементов типа byte с помощью типа byte
byte[] arr = new byte[Byte.toUnsignedInt(i)];
не, не понимаю
Грубо говоря - 0..127 signed соответствуют 0..127 unsigned. -128 signed соответствует 128 unsigned. -127 signed соответствует 129 unsigned и т.д.
Просто у меня возник вопрос «почему?». Если я хочу оперировать массивом беззнаковых элементов до 220, то логичней использовать один байт на элемент(для JVM, 36-и битное представление байта для других архитектур не рассматриваем), так?
Так. Оперируй, используй. Проблем не будет.
Даже вопрос в другом: с каких соображений (критериев) в Java отсутствуют беззнаковые типы? Безопасность?
Лыко-мочало, начинаем сначала. С каких соображений по умолчанию в Java целочисленные типы трактуются как signed? Видимо потому, что в подавляющем большинстве случаев нужны именно signed типы. Для unsigned операций в стандартной библиотеке есть все нужные функции.