|
|
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, уважаемые участники форума и знатоки платформы Java. Довольно часто мне приходится сталкиваться с проблемой - отсутствия в Java беззнакового int. И я не могу понять почему исключили данный (весьма удобный) тип. Например, также очень часто хотелось бы в программах использовать беззнаковый byte - и его тоже нет.. Почему так сделано? Есть ли этому обоснование? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 11:28:50 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
Насчёт обоснования не знаю, но жить без это можно. Хотя я согласен что в общем-то байт должен быть не от -128 до 127, а от 0 до 255 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 11:48:45 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
лучше еслибы он был и тем и другим (беззнаковым или знаковым когда нужно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 11:58:18 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
Как беззнаковый целочисленный тип можно использовать тип char (если очень хочется): Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 12:18:31 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
KachalovКак беззнаковый целочисленный тип можно использовать тип char (если очень хочется): Код: plaintext 1. 2. нет, это не пойдет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 12:23:32 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
unicornmirageЕсть ли этому обоснование?беззнаковый тип можно имитировать :) http://www.intuit.ru/department/se/pbmsu/8/3.html Следует по возможности избегать беззнаковых типов, поскольку арифметика беззнаковых чисел не на всех компьютерах реализована одинаково и из-за этого при переносе программы с одной платформы на другую могут возникнуть проблемы. По этой причине в языке Java беззнаковые числа запрещены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 13:37:34 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
KachalovКак беззнаковый целочисленный тип можно использовать тип char (если очень хочется): Код: plaintext 1. 2. Яб не рискнул. Тип char - кодовая единица. Сколько он байтов будет - загадка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 14:03:01 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
unicornmirageЗдравствуйте, уважаемые участники форума и знатоки платформы Java. Довольно часто мне приходится сталкиваться с проблемой - отсутствия в Java беззнакового int. И я не могу понять почему исключили данный (весьма удобный) тип. Например, также очень часто хотелось бы в программах использовать беззнаковый byte - и его тоже нет.. Почему так сделано? Есть ли этому обоснование? Я один такой тупой идиот, что не может придумать зачем нужны такие типы данных? Научите, где без этого нельзя прожить или это вызвает большие затрудение, плз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 14:08:17 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
SarinЯб не рискнул. Тип char - кодовая единица. Сколько он байтов будет - загадка. 16bit. Это прописано в спецификации языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 14:09:28 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs Я один такой тупой идиот, что не может придумать зачем нужны такие типы данных? Научите, где без этого нельзя прожить или это вызвает большие затрудение, плз. я просто спросил - зачем брать это так близко к сердцу... у меня были пару задач в которых пришлось применять другие подходы (с unsigned int например было бы проще) - все они были связаны с битовыми операциями... и ничего - волосы не рвал на голове, но вопросы возникли. вот и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 15:03:34 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
unicornmirageя просто спросил - зачем брать это так близко к сердцу... у меня были пару задач в которых пришлось применять другие подходы (с unsigned int например было бы проще) - все они были связаны с битовыми операциями... и ничего - волосы не рвал на голове, но вопросы возникли. вот и всё. Битовым операциям на знаковость откровенно положить, если не использовать знаковый сдвиг. Н-р, в заковом int можно спокойно хранить argb (по 8bit на компонент). Чем unsignment int тут помог бы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 15:16:08 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs Н-р, в заковом int можно спокойно хранить argb (по 8bit на компонент). Чем unsignment int тут помог бы? я понял Вас - использование ббеззнаковых - это дело стародавней привычки :) тем не менее все равно спасибо за откровение.. некоторые вопросы в теме помогли для дальнейшего осмысления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 23:58:44 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
Вообще, имхо, беззнаковые числа нужны. Например храние цветов. По три байта на пиксель. Как тут с беззнеакоковыми быть? Можно, конечно. Но неудобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2006, 00:19:29 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
http://www.intuit.ru/department/se/pbmsu/8/3.html Следует по возможности избегать беззнаковых типов, поскольку арифметика беззнаковых чисел не на всех компьютерах реализована одинаково и из-за этого при переносе программы с одной платформы на другую могут возникнуть проблемы. По этой причине в языке Java беззнаковые числа запрещены. Довольно странное обоснование. Что-ж давайте запретим на всякий случай double, потому-как не на всех мобилках он реализован аппаратно. P.S. Почему-то в стандартах CLR на этот аспект забили. P.P.S. Наверное брали равнение на флагманские CPU. Или просто было пох..й. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2006, 00:42:16 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
Беззнаковых чисел нет потому что авторы языка решили, что они не нужны. Так оно и есть. Побитовые операции всё равно существуют и знаковый разряд в них участвует, так что разницы нет - что знаковое оно что беззнаковое (за исключением операций >> и >>>). Ещё в других языках беззнаковые числа используются для записи адресов памяти, что к Java неприменимо. Каков диапазон байта -128 - 127 или 0 - 255 - не имеет практического значения (для преобразования байтов в символы и обратно есть функции), но для переносимости программ желательно чтоб был только один из этих вариантов, что в Java обеспечивается. В общем язык Java не дураки придумали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2006, 12:01:55 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
SarinВообще, имхо, беззнаковые числа нужны. Например храние цветов. По три байта на пиксель. Как тут с беззнеакоковыми быть? Можно, конечно. Но неудобно. А что мешает? Javadoc: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2006, 21:30:30 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
Упс, фиксед-поля не обрезаются... ====================== - Я подхожу к клетке с медведем панда... Видите, какие у него черные круги под глазами?! Медведь панда как бы всем своим видом говорит нам: "Не бухайте!" ====================== ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2006, 21:31:56 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
А как например если я хочю работать с витами и мне на знак плевать , мне надо скачать к примеру из потока 11 бит, поскольку сложилось исторически так что работаем по байтно(8 бит (хотя движение к примеру AMD64 говорит о том что байты в будующем объединят в какойнибудь гипервайт:) )), то я должен читать по байтно и сдвигом вытаскивать биты, а тут ещё знаки какието в НЕТИПИЗИРОВАННЫХ данных. Получается работаем с информацией, а приходится возится с преобразованием типа. Я считаю что без знаковый тип причёт размера в один байт должен быть!. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2006, 22:20:07 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
В принципе, эта проблема выглядит так: если функция может вернуть целое число 2147483648, то для представления результата желательно описать ее прототип как public static long , или заморачиватся с преобразованием диапазона, при обработке результата что в целом не может не напрягать девелопера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2006, 00:18:16 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
sysmanxА как например если я хочю работать с витами и мне на знак плевать , мне надо скачать к примеру из потока 11 бит, поскольку сложилось исторически так что работаем по байтно(8 бит (хотя движение к примеру AMD64 говорит о том что байты в будующем объединят в какойнибудь гипервайт:) )), то я должен читать по байтно и сдвигом вытаскивать биты, а тут ещё знаки какието в НЕТИПИЗИРОВАННЫХ данных. Получается работаем с информацией, а приходится возится с преобразованием типа. Я считаю что без знаковый тип причёт размера в один байт должен быть!. Для начала нужно опеределить с витами, битами или байтами или гипервайтами ты собрался работать. Судя по "ещё знаки какието в НЕТИПИЗИРОВАННЫХ данных" вы ни разу не пытались делать то, о чём говорите. Если это не так, приведите пример кода, где вы "возитесь с преобразованием типа". byte, short при вычислениях _всегда_ приводятся к типу int (за исключением операций ++). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2006, 12:38:08 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
sysmanxЯ считаю что без знаковый тип причёт размера в один байт должен быть!.Хорошо хоть щитать научился, потом, когда песать научишься, приходи мы тебя послушаем. А если "знаковый тип причёт размера в один байт должен быть" то возьми, да создай свой язык SYSMANX, тебе никто же не мешает. Зачем тебе нелепый язык, с помощью которого разрабатывают более 5 млн программистов а пользуются их программами больше миллиарда человек? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2006, 01:15:37 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
Fear&Loathing, вообще то это уже следствие - былобы весьма интересно узнать именно причины! все приведенные ответы в теме посвящены одному - "что можно обойтись беззнаковыми" - Да и в СИ можно обойтись если есть желание - это не ответ. В начале вопроса я четко спросил - почему так сделано в Java? с какой целью? почему? если нечего ответить - то не надо переходить на личности - неприятно слушать подобные ответы - что мол создатели java не дураки а это ты дурак наивный задаешь вопросы - когда миллионы программистов програмируют.. не надо пиарить, плиз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2006, 01:58:44 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
to Миша Оно: касательно кода то писал и некаких проблем нет, но было бы приятней если бы при написании знал что бита знака нет (Тоесть я хочю сказать что действия которые делал не отражаются в типе int (т.е. работая с int я думал о byte :) )). касательно: Миша Оноbyte, short при вычислениях _всегда_ приводятся к типу int (за исключением операций ++). А при преобразование типа не создаётся ли новая переменная большего размера.(если наоборот то возможно что нет. А в большию сторону нужно, потому что размер int больше byte и нужно гдето хранить пустые байты(а то читать и переменной будем белиберду другой переменной)). to Fear&Loathing: В мире пользователей больше чем программистов!. И что теперь быть юзверем. К тамуже если человек не думал как делать нужно, а делал как делают все, то му бы так и бегали на четвереньках и общались бы примитивными звуками. Всё чем пользуется человек сегодня создано людьми которым не хотелось делать так как делалось всегда, а хотелось подумать как правельнее!. Да кстати насчёт языка неплахая мысль :) (На этот счёт можно размашлять и размышлять). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2006, 02:30:14 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
sysmanxto Миша Оно: касательно кода то писал и некаких проблем нет, но было бы приятней если бы при написании знал что бита знака нет (Тоесть я хочю сказать что действия которые делал не отражаются в типе int (т.е. работая с int я думал о byte :) )). Отсюда выводы: - отсутствие беззнаковых типов никак не мешает - работать с int, а думать о byte, - странное извращение sysmanx Миша Оноbyte, short при вычислениях _всегда_ приводятся к типу int (за исключением операций ++). А при преобразование типа не создаётся ли новая переменная большего размера. Типы меньшего размера чем int реализованы в jvm как int с ограничением на диапазон значений. Касты byte2int/short2int/char2int и обратно требует только проверки диапазона значений без каких-либо выделений памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2006, 12:30:09 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
Миша Оно - работать с int, а думать о byte, - странное извращение иногда хочется задумываться, например в таких задачах - есть у нас в потоке данных массив байт, его можно прочитать за один раз в буфер - InputStream.read(byte[]), если нам надо чтобы это был массив unsigned byte[] - нужно потрудиться еще и преобразовать этот массив byte[] в массив int[] - разве нет? :) заместо одной операции чтения массива мы имеем две -чтение и преобразование.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2006, 14:21:09 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
2 автор Что то вроде этого? C++/C# Код: plaintext 1. Java Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2006, 17:14:59 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
ну вроде того ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2006, 22:25:19 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
mayton2 автор Что то вроде этого? Java Код: plaintext 1. Вроде этого Код: plaintext 1. 2unicornmirage: Вообще-то в цитировании речь шла об int и byte, а не byte и int. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2006, 13:21:48 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs Я один такой тупой идиот, что не может придумать зачем нужны такие типы данных? Я сейчас пишу генератор AFP-документов, там все данные в потоке документа - беззнаковые. Например, надо записать управляющий код 0xf7 , пишешь writeByte( 0xf7 ); ... void writeByte( byte val ); и обламываешься. 0xf7 - во-первых, int, а во вторых, в byte не влазит. Писать -0x77 не хочется, потому что это - код, он должен быть таким, какой он есть. Чтобы сразу узнавался. Вот и приходится писать void writeByte( short val ); // когда думаешь byte void writeShort( int val ); // когда думаешь short и так далее. Может быть это моя С-шная зашоренность, и можно как-то еще это проще сделать, но я что-то не нашел другого способа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 23:47:54 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
А вот так работают настоящие стахановцы - http://www.darksleep.com/player/JavaAndUnsignedTypes.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2006, 07:09:46 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
MasterZiv NotGonnaGetUs Я один такой тупой идиот, что не может придумать зачем нужны такие типы данных? Я сейчас пишу генератор AFP-документов, там все данные в потоке документа - беззнаковые. Например, надо записать управляющий код 0xf7 , пишешь writeByte( 0xf7 ); ... void writeByte( byte val ); и обламываешься. 0xf7 - во-первых, int, а во вторых, в byte не влазит. Писать -0x77 не хочется, потому что это - код, он должен быть таким, какой он есть. Чтобы сразу узнавался. Вот и приходится писать void writeByte( short val ); // когда думаешь byte void writeShort( int val ); // когда думаешь short и так далее. Может быть это моя С-шная зашоренность, и можно как-то еще это проще сделать, но я что-то не нашел другого способа. 0xF7 прекрасно влазит в байт. Получается -9 или если в двоичном виде - то 11110111. Подумай вот над этим: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2006, 07:24:42 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
Задача: На вход поступает массив byte[] = { 0xd9, 0x9f, 0x24 } Надо преобразовать его в целое число, считая, что byte[0] -- это младший байт, byte[1] -- это средний байт, byte[2] -- это старший байт Если тупо посчитать по формуле byte[0] + byte[1]*256 + byte[2]*256*256, то ответ будет неверным из-за того, что Java криво работает с беззнаковыми числами. пробовал делать так: (int)(byte[0]) + ((int)(byte[1])*256) + (((int)byte[2])*256*256) -- ответ тоже не соответствует правильному попробовал так: (long)(byte[0]) + ((long)(byte[1])*256) + (((long)byte[2])*256*256) Тоже не работает! Потом ещё много чего пробовал... Сдвиги, например... Блин! Как же посчитать формулу y=a+b*256+c*256*256 на Java? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2013, 18:31:13 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
Tamachi, (byte[0] &0xFF) + (byte[1] & 0xFF) * 256 + (byte[2] &0xFF) *256*256 Или даже (byte[0] &0xFF) + ((byte[1] & 0xFF) << 8) + ((byte[2] &0xFF) << 16) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2013, 18:45:39 |
|
||
|
Беззнаковые числа (а всё таки почему их нет в Яве)?
|
|||
|---|---|---|---|
|
#18+
Tamachi, Может не надо ничего счетать, а просто прочитать long? http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=947160&msg=12688953 (тут double) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2013, 18:49:31 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2129648]: |
0ms |
get settings: |
18ms |
get forum list: |
25ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
60ms |
get topic data: |
21ms |
get forum data: |
6ms |
get page messages: |
121ms |
get tp. blocked users: |
3ms |
| others: | 340ms |
| total: | 610ms |

| 0 / 0 |
