LINUX.ORG.RU

История изменений

Исправление 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 операций в стандартной библиотеке есть все нужные функции.