powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Беззнаковые числа (а всё таки почему их нет в Яве)?
35 сообщений из 35, показаны все 2 страниц
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33709454
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, уважаемые участники форума и знатоки платформы Java.

Довольно часто мне приходится сталкиваться с проблемой - отсутствия в Java беззнакового int. И я не могу понять почему исключили данный (весьма удобный) тип. Например, также очень часто хотелось бы в программах использовать беззнаковый byte - и его тоже нет..
Почему так сделано? Есть ли этому обоснование?
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33709548
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчёт обоснования не знаю, но жить без это можно.

Хотя я согласен что в общем-то байт должен быть не от -128 до 127, а от 0 до 255
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33709612
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше еслибы он был и тем и другим (беззнаковым или знаковым когда нужно)
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33709719
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как беззнаковый целочисленный тип можно использовать тип char (если очень хочется):
Код: plaintext
1.
2.
    char  c= 48 ;
   c++;
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33709745
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovКак беззнаковый целочисленный тип можно использовать тип char (если очень хочется):
Код: plaintext
1.
2.
    char  c= 48 ;
   c++;

нет, это не пойдет...
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33710103
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirageЕсть ли этому обоснование?беззнаковый тип можно имитировать :)

http://www.intuit.ru/department/se/pbmsu/8/3.html
Следует по возможности избегать беззнаковых типов, поскольку арифметика
беззнаковых чисел не на всех компьютерах реализована одинаково и из-за этого
при переносе программы с одной платформы на другую могут возникнуть проблемы.
По этой причине в языке Java беззнаковые числа запрещены.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33710234
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovКак беззнаковый целочисленный тип можно использовать тип char (если очень хочется):
Код: plaintext
1.
2.
    char  c= 48 ;
   c++;

Яб не рискнул. Тип char - кодовая единица. Сколько он байтов будет - загадка.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33710263
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirageЗдравствуйте, уважаемые участники форума и знатоки платформы Java.

Довольно часто мне приходится сталкиваться с проблемой - отсутствия в Java беззнакового int. И я не могу понять почему исключили данный (весьма удобный) тип. Например, также очень часто хотелось бы в программах использовать беззнаковый byte - и его тоже нет..
Почему так сделано? Есть ли этому обоснование?

Я один такой тупой идиот, что не может придумать зачем нужны такие типы данных?


Научите, где без этого нельзя прожить или это вызвает большие затрудение, плз.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33710267
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinЯб не рискнул. Тип char - кодовая единица. Сколько он байтов будет - загадка.
16bit.
Это прописано в спецификации языка.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33710547
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs

Я один такой тупой идиот, что не может придумать зачем нужны такие типы данных?
Научите, где без этого нельзя прожить или это вызвает большие затрудение, плз.
я просто спросил - зачем брать это так близко к сердцу...
у меня были пару задач в которых пришлось применять другие подходы (с unsigned int например было бы проще) - все они были связаны с битовыми операциями... и ничего - волосы не рвал на голове, но вопросы возникли. вот и всё.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33710603
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirageя просто спросил - зачем брать это так близко к сердцу...
у меня были пару задач в которых пришлось применять другие подходы (с unsigned int например было бы проще) - все они были связаны с битовыми операциями... и ничего - волосы не рвал на голове, но вопросы возникли. вот и всё.
Битовым операциям на знаковость откровенно положить, если не использовать знаковый сдвиг.

Н-р, в заковом int можно спокойно хранить argb (по 8bit на компонент).
Чем unsignment int тут помог бы?
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33711779
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
Н-р, в заковом int можно спокойно хранить argb (по 8bit на компонент).
Чем unsignment int тут помог бы?
я понял Вас - использование ббеззнаковых - это дело стародавней привычки :) тем не менее все равно спасибо за откровение.. некоторые вопросы в теме помогли для дальнейшего осмысления.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33711798
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, имхо, беззнаковые числа нужны. Например храние цветов. По три байта на пиксель. Как тут с беззнеакоковыми быть? Можно, конечно. Но неудобно.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33711810
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.intuit.ru/department/se/pbmsu/8/3.html
Следует по возможности избегать беззнаковых типов, поскольку арифметика
беззнаковых чисел не на всех компьютерах реализована одинаково и из-за этого
при переносе программы с одной платформы на другую могут возникнуть проблемы.
По этой причине в языке Java беззнаковые числа запрещены.


Довольно странное обоснование. Что-ж давайте запретим на всякий
случай double, потому-как не на всех мобилках он реализован
аппаратно.

P.S. Почему-то в стандартах CLR на этот аспект забили.

P.P.S. Наверное брали равнение на флагманские CPU.
Или просто было пох..й.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33712652
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Беззнаковых чисел нет потому что авторы языка решили, что они не нужны. Так оно и есть. Побитовые операции всё равно существуют и знаковый разряд в них участвует, так что разницы нет - что знаковое оно что беззнаковое (за исключением операций >> и >>>). Ещё в других языках беззнаковые числа используются для записи адресов памяти, что к Java неприменимо. Каков диапазон байта -128 - 127 или 0 - 255 - не имеет практического значения (для преобразования байтов в символы и обратно есть функции), но для переносимости программ желательно чтоб был только один из этих вариантов, что в Java обеспечивается. В общем язык Java не дураки придумали.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33714106
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinВообще, имхо, беззнаковые числа нужны. Например храние цветов. По три байта на пиксель. Как тут с беззнеакоковыми быть? Можно, конечно. Но неудобно.

А что мешает? Javadoc:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
public Color(int rgb)

Creates an opaque sRGB color with the specified combined RGB value consisting of the red component in bits 16-23, the green component in bits 8-15, and the blue component in bits 0-7. The actual color used in rendering depends on finding the best match given the color space available for a particular output device. Alpha is defaulted to 255.

Parameters:rgb - the combined RGB components

See Also:ColorModel.getRGBdefault(), getRed(), getGreen(), getBlue(), getRGB()
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33714107
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс, фиксед-поля не обрезаются...

======================
- Я подхожу к клетке с медведем панда...
Видите, какие у него черные круги под глазами?!
Медведь панда как бы всем своим видом говорит нам: "Не бухайте!"
======================
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33714145
sysmanx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как например если я хочю работать с витами и мне на знак плевать , мне надо скачать к примеру из потока 11 бит, поскольку сложилось исторически так что работаем по байтно(8 бит (хотя движение к примеру AMD64 говорит о том что байты в будующем объединят в какойнибудь гипервайт:) )), то я должен читать по байтно и сдвигом вытаскивать биты, а тут ещё знаки какието в НЕТИПИЗИРОВАННЫХ данных. Получается работаем с информацией, а приходится возится с преобразованием типа.
Я считаю что без знаковый тип причёт размера в один байт должен быть!.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33714234
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, эта проблема выглядит так: если функция
может вернуть целое число 2147483648, то для представления
результата желательно описать ее прототип как public
static long
, или заморачиватся с преобразованием диапазона,
при обработке результата что в целом не может не напрягать
девелопера.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33714423
Миша Оно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sysmanxА как например если я хочю работать с витами и мне на знак плевать , мне надо скачать к примеру из потока 11 бит, поскольку сложилось исторически так что работаем по байтно(8 бит (хотя движение к примеру AMD64 говорит о том что байты в будующем объединят в какойнибудь гипервайт:) )), то я должен читать по байтно и сдвигом вытаскивать биты, а тут ещё знаки какието в НЕТИПИЗИРОВАННЫХ данных. Получается работаем с информацией, а приходится возится с преобразованием типа.
Я считаю что без знаковый тип причёт размера в один байт должен быть!.

Для начала нужно опеределить с витами, битами или байтами или гипервайтами ты собрался работать.

Судя по "ещё знаки какието в НЕТИПИЗИРОВАННЫХ данных" вы ни разу не пытались делать то, о чём говорите.
Если это не так, приведите пример кода, где вы "возитесь с преобразованием типа".

byte, short при вычислениях _всегда_ приводятся к типу int (за исключением операций ++).
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33714844
Fear&Loathing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sysmanxЯ считаю что без знаковый тип причёт размера в один байт должен быть!.Хорошо хоть щитать научился, потом, когда песать научишься, приходи мы тебя послушаем. А если "знаковый тип причёт размера в один байт должен быть" то возьми, да создай свой язык SYSMANX, тебе никто же не мешает. Зачем тебе нелепый язык, с помощью которого разрабатывают более 5 млн программистов а пользуются их программами больше миллиарда человек?
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33714857
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fear&Loathing, вообще то это уже следствие - былобы весьма интересно узнать именно причины!
все приведенные ответы в теме посвящены одному - "что можно обойтись беззнаковыми" -
Да и в СИ можно обойтись если есть желание - это не ответ. В начале вопроса я четко спросил - почему так сделано в Java? с какой целью? почему?
если нечего ответить - то не надо переходить на личности - неприятно слушать подобные ответы - что мол создатели java не дураки а это ты дурак наивный задаешь вопросы - когда миллионы программистов програмируют.. не надо пиарить, плиз.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33714860
sysmanx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Миша Оно:
касательно кода то писал и некаких проблем нет, но было бы приятней если бы при написании знал что бита знака нет (Тоесть я хочю сказать что действия которые делал не отражаются в типе int (т.е. работая с int я думал о byte :) )).

касательно:
Миша Оноbyte, short при вычислениях _всегда_ приводятся к типу int (за исключением операций ++).

А при преобразование типа не создаётся ли новая переменная большего размера.(если наоборот то возможно что нет. А в большию сторону нужно, потому что размер int больше byte и нужно гдето хранить пустые байты(а то читать и переменной будем белиберду другой переменной)).

to Fear&Loathing:
В мире пользователей больше чем программистов!. И что теперь быть юзверем.
К тамуже если человек не думал как делать нужно, а делал как делают все, то му бы так и бегали на четвереньках и общались бы примитивными звуками. Всё чем пользуется человек сегодня создано людьми которым не хотелось делать так как делалось всегда, а хотелось подумать как правельнее!.
Да кстати насчёт языка неплахая мысль :) (На этот счёт можно размашлять и размышлять).
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33715038
Миша Оно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sysmanxto Миша Оно:
касательно кода то писал и некаких проблем нет, но было бы приятней если бы при написании знал что бита знака нет (Тоесть я хочю сказать что действия которые делал не отражаются в типе int (т.е. работая с int я думал о byte :) )).

Отсюда выводы:
- отсутствие беззнаковых типов никак не мешает
- работать с int, а думать о byte, - странное извращение

sysmanx Миша Оноbyte, short при вычислениях _всегда_ приводятся к типу int (за исключением операций ++).

А при преобразование типа не создаётся ли новая переменная большего размера.

Типы меньшего размера чем int реализованы в jvm как int с ограничением на диапазон значений. Касты byte2int/short2int/char2int и обратно требует только проверки диапазона значений без каких-либо выделений памяти.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33715129
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Миша Оно
- работать с int, а думать о byte, - странное извращение


иногда хочется задумываться, например в таких задачах - есть у нас в потоке данных массив байт, его можно прочитать за один раз в буфер - InputStream.read(byte[]), если нам надо чтобы это был массив unsigned byte[] - нужно потрудиться еще и преобразовать этот массив byte[] в массив int[] - разве нет? :) заместо одной операции чтения массива мы имеем две -чтение и преобразование..
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33715313
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 автор

Что то вроде этого?

C++/C#
Код: plaintext
1.
for(int i= 0 ;i<size;i++) sum+=a[i];


Java
Код: plaintext
1.
for(int i= 0 ;i<size;i++) sum+=( a[i]< 0  )?(int)a[i]+ 256 :(int)a[i];
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33715576
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вроде того
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33717597
Миша Оно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton2 автор

Что то вроде этого?

Java
Код: plaintext
1.
for(int i= 0 ;i<size;i++) sum+=( a[i]< 0  )?(int)a[i]+ 256 :(int)a[i];


Вроде этого

Код: plaintext
1.
 for ( int  i= 0 ;i<size;i++) sum+= a[i] & 0xFF;

2unicornmirage:

Вообще-то в цитировании речь шла об int и byte, а не byte и int.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33734132
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
Я один такой тупой идиот, что не может придумать зачем нужны такие типы данных?


Я сейчас пишу генератор AFP-документов, там все данные в потоке документа - беззнаковые. Например, надо записать управляющий код
0xf7 , пишешь

writeByte( 0xf7 );
...
void writeByte( byte val );

и обламываешься.

0xf7 - во-первых, int, а во вторых, в byte не влазит.

Писать -0x77 не хочется, потому что это - код, он должен быть таким, какой он есть. Чтобы сразу узнавался.

Вот и приходится писать
void writeByte( short val ); // когда думаешь byte
void writeShort( int val ); // когда думаешь short

и так далее.

Может быть это моя С-шная зашоренность, и можно как-то еще это проще сделать, но я что-то не нашел другого способа.
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33734297
romvs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот так работают настоящие стахановцы - http://www.darksleep.com/player/JavaAndUnsignedTypes.html
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #33734305
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
 public   class  Main
{
     public  Main()
    {
         byte  val1 = ( byte )0xFE;
         byte  val2 = ( byte )0xBA;

         byte  result = writeByte(val1, val2);

        System.out.println("RESULT: "+result);
        
    }

     public   static   void  main(String[] args)
    {
         new  Main();
    }
    
     public   byte  writeByte( byte  value1,  byte  value2)
    {
        // не понимаю, почему операция между двумя байтовыми значениями 
        // преобразуется к int
         byte  result = ( byte )(value1 - value2);
         return  result;
    }
}
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #38206188
Tamachi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача:
На вход поступает массив 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?
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #38206197
maxkar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tamachi,

(byte[0] &0xFF) + (byte[1] & 0xFF) * 256 + (byte[2] &0xFF) *256*256
Или даже
(byte[0] &0xFF) + ((byte[1] & 0xFF) << 8) + ((byte[2] &0xFF) << 16)
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #38206199
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tamachi,
Может не надо ничего счетать, а просто прочитать long?

http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=947160&msg=12688953
(тут double)
...
Рейтинг: 0 / 0
Беззнаковые числа (а всё таки почему их нет в Яве)?
    #38206265
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tamachi,

Код: java
1.
2.
int rgb = new java.awt.Color(0xD9, 0x9F, 0x24, 0).getRGB();
System.out.format("%X\n", rgb);
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Беззнаковые числа (а всё таки почему их нет в Яве)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]