unsigned short в java

Как объявить unsigned short значение unsigned short в Java?

На самом деле ты не можешь. Java не имеет никаких неподписанных типов данных, кроме char .

По общему признанию, вы можете использовать char – это 16-разрядный неподписанный тип, но это было бы ужасно в моем представлении, поскольку char явно предназначен для текста: когда код использует char , я ожидаю, что он будет использовать его для кода UTF-16 единицы, представляющие интересный для программы текст, а не произвольные беззнаковые 16-битные целые числа без отношения к тексту.

Если вам действительно нужно значение с ровно 16 бит:

Решение 1. Используйте доступную подписанную короткую позицию и перестаньте беспокоиться о знаке, если вам не нужно выполнять операции сравнения (<, <=,>,> =) или деления (/,%, >>). См. Этот ответ, как обрабатывать подписанные номера, как если бы они были без знака.

Решение 2 (где решение 1 не применяется): используйте младшие 16 бит int и удаляйте более высокие биты с помощью & 0xffff там, где это необходимо.

Вы можете использовать символ, так как это 16-значное значение без знака (хотя технически это символ Юникода, поэтому он может быстро измениться, чтобы быть 24-битным значением в будущем) … Другая альтернатива – использовать int и убедиться, что он находится в радиусе действия.

Не используйте символ – используйте int 🙂

И вот ссылка, обсуждающая Java и отсутствие unsigned .

Это действительно затхлый stream, но в интересах любого, кто придет после. Символ является числовым. Он поддерживает все математические операторы, бит-операции и т. Д. Это неподписанное 16.

Мы обрабатываем сигналы, записанные пользовательским встроенным оборудованием, поэтому мы обрабатываем много неподписанных 16 из A-D. Мы много лет используем символы во всем мире и никогда не испытывали никаких проблем.

Нет такого типа в java

Из DataInputStream.java

 public final int readUnsignedShort() throws IOException { int ch1 = in.read(); int ch2 = in.read(); if ((ch1 | ch2) < 0) throw new EOFException(); return (ch1 << 8) + (ch2 << 0); } 

Да, нет такой вещи, если вы хотите использовать значение в кодовых и битовых операциях.

«В Java SE 8 и более поздних версиях вы можете использовать тип данных int для представления 32-битного целого числа без знака, которое имеет минимальное значение 0 и максимальное значение 232-1». Однако это относится только к int и long, но не к короткому 🙁

Нет, на самом деле нет такого метода, java – это язык высокого уровня. Вот почему у Java нет никаких неподписанных типов данных.

Он сказал, что хочет создать многомерный короткий массив. Но никто не предложил поразрядных операторов? Из того, что я читал, вы хотите использовать 16-битные целые числа из 32-битных целых чисел для экономии памяти?

Итак, во-первых, для начала 10 000 x 10 000 коротких значений – 1600 000 000 бит, 200 000 000 байтов, 200 000 килобайт, 200 мегабайт.

Если вам нужно что-то с потреблением памяти в 200 МБ, вы можете захотеть перепроектировать эту идею. Я также не считаю, что даже компиляция не говоря уже о побеге. Вы никогда не должны инициализировать такие большие массивы, если что-нибудь использует 2 функции, называемые On Demand Loading и кэширование данных. По сути, загрузка по требованию подразумевает идею загрузки данных по мере необходимости. Тогда кэширование данных делает то же самое, но использует пользовательскую работу фрейма для удаления старой памяти и добавления новой информации по мере необходимости. Это сложная задача, чтобы иметь высокую скорость работы. Есть и другие вещи, которые вы можете сделать, но эти двое – мои любимые, когда все сделано правильно.

Вернемся к тому, что я говорил о побитовых операторах.

Таким образом, 32-битное целое число или в Java «int». Вы можете сохранить так называемые «биты», так что предположим, что у вас было 32 булевых значения, которые в Java все значения занимают 32 бита (за исключением длинного), или для массивов они занимают 8 для байта, 16 для краткости и 32 для int , Поэтому, если у вас нет массивов, вы не получаете каких-либо преимуществ памяти от использования байта или короткого замыкания. Это не значит, что вы не должны использовать его как способ обеспечить, чтобы вы и другие знали диапазон данных, который должен иметь это значение.

Теперь, когда я говорил, что вы можете эффективно хранить 32 булевых элемента в одно целое, выполнив следующее:

 int many_booleans = -1; //All are true; int many_booleans = 0; //All are false; int many_booleans = 1 | 2 | 8; //Bits 1, 2, and 4 are true the rest are false; 

Итак, теперь короткий состоит из 16 бит, поэтому 16 + 16 = 32, который идеально подходит для 32-битного целого. Поэтому каждое значение int может состоять из двух коротких значений.

 int two_shorts = value | (value2 << 16); 

Итак, что делает выше, значение имеет значение от -32768 до 32767 или как значение без знака 0 - 65535. Так что скажем, значение равно -1, так как значение без знака было 65535. Это означает, что бит 1-16 включается , но при фактическом выполнении математики учитывайте диапазон 0 - 15.

Поэтому нам нужно активировать биты 17 - 32. Таким образом, мы должны начать с чего-то большего, чем 15 бит. Итак, мы начинаем с 16 бит. Таким образом, принимая значение2 и умножая его на 65536, что и делает «<< 16». Теперь мы бы предположили, что значение 2 равно 3, это будет OR'd 3x65536 = 196608. Таким образом, наше целочисленное значение будет равно 262143.

 int assumed_value = 262143; 

поэтому предположим, что мы хотим получить два 16-битных целочисленных значения.

 short value1 = (short)(assumed_value & 0xFFFF); //-1 short value2 = (short)(assumed_value >> 16); //=3 

Также в основном думать о побитовых операциях как о силе 2. Это все, что они на самом деле. Никогда не смотрите на это с точки зрения 0 и 1. Я в основном разместил это, чтобы помочь любому, кто может столкнуться с этим поиском беззнаковых коротких или даже, возможно, многомерных массивов. Если есть какие-то опечатки, я извиняюсь, быстро написал это.

Если использование сторонней библиотеки является опцией, есть jOOU (библиотека отпитка jOOQ ), которая предлагает типы обертки для целых чисел без знака в Java. Это не совсем то же самое, что поддержка примитивного типа (и, следовательно, байтового кода) для неподписанных типов, но, возможно, он все еще достаточно хорош для вашего прецедента.

 import static org.joou.Unsigned.*; // and then... UShort s = ushort(1); 

(Отказ от ответственности: я работаю в компании за этими библиотеками)

Java не имеет неподписанных типов. Для чего тебе это?

Однако у Java есть тип данных «byte».

Вы можете закодировать себя по classу ShortUnsigned и определить методы для тех операторов, которые вы хотите. Увы, вы не сможете перегружать + и - и другие на них, а также не подразумевать преобразование типов с другими примитивными или числовыми типами объектов.

Как и некоторые другие ответчики, я задаюсь вопросом, почему у вас есть настоятельная необходимость в беззнаковом коротком замыкании, чтобы не заполнить другой тип данных.

Простая программа, чтобы показать, почему нужны неподписанные числа:

 package shifttest; public class ShiftTest{ public static void main(String[] args){ short test = -15000; System.out.format ("0x%04X 0x%04X 0x%04X 0x%04X 0x%04X\n", test, test>>1, test>>2, test>>3, test>>4); } } 

Результаты:

 0xC568 0xFFFFE2B4 0xFFFFF15A 0xFFFFF8AD 0xFFFFFC56 

Теперь для тех, которые не являются системными типами:

JAVA выполняет арифметический сдвиг, потому что операнд подписан, однако есть случаи, когда логический сдвиг был бы уместным, но JAVA (в частности, Sun), считал это ненужным, слишком плохо для нас по их недальновидности. Shift, And, Or, and Exclusive или ограниченные инструменты, когда все, что у вас есть, – это более длинные номера. Это особая проблема при взаимодействии с аппаратными устройствами, которые говорят об ошибках «REAL», которые составляют 16 бит или более. «char» не гарантированно работает (сейчас он равен двум байтам), но на нескольких восточных языках, например на китайском, корейском и японском языках, требуется не менее 3 байт. Я не знаком с потребностью в количестве для языков стиля sandscript. Количество байтов не зависит от программиста, а от комитета по стандартам JAVA. Таким образом, базируя char как 16 бит, существует риск нисходящего streamа. Чтобы безопасно реализовать беззнаковые шорты JAVA, особый class является лучшим решением, основанным на вышеупомянутых неоднозначностях. Недостатком classа является неспособность перегрузить математические операции для этого специального classа. Многие из авторов этой темы точно указали на эти проблемы, но мой вклад – это пример рабочего кода и мой опыт работы с 3-байтными языками gif в C ++ под Linux.

  • Почему эти уравнения деления приводят к нулю?
  • Где в памяти мои переменные, хранящиеся в C?
  • Тип указателя возвращаемой функции
  • Преобразовать строку в тип C #
  • Как разрешить «должен быть экземпляр строки, строка, заданная» до PHP 7?
  • Как вы знаете переменный тип в java?
  • почему byte + = 1 компилировать, но byte = byte + 1 нет?
  • Разница между и
  • Типы и classы переменных
  • Производительность TypeCasting
  • Типы данных PostgreSQL и C #
  • Давайте будем гением компьютера.