-
- На персональной ЭВМ, где крутится джава-эклипс, long 64 битный, поэтому не выйдет за ранг. Но тренд наверно хреновый, потому как причина ругани эклипса понятна: сначала формируется константа в его default-int32-формате, и эклипс видит превышение Petrovich(64 знак., 12.01.2016 13:09, )
- Эклипс не прав. Если sizeof(int)==32 и sizeof(long long int)==64, то константа 2147483648 имеет тип long long int. Кстати, а зачем вот это: "long x =(long)2147483648;"? Это такой извращённый способ написать "long x = -1;"? - SciFi(12.01.2016 13:13)
- Кхм....А можно пример архитектуры, где int имеет размер 32 байта??? - Evgeny_CD(13.01.2016 13:39)
- Всё объяснять приходится. Это особенный sizeof, возвращает размер типа в битах :-) SciFi(98 знак., 13.01.2016 13:43)
- long x =(long)2147483648; для наглядности, потому как без префикса (long) тоже ругается. Думаю эклипс все же прав, так как компилятор имеет внутреннее представление int (32бита), тупо берет литерал 2147483648 и не может его вкрячить в int32. А Petrovich(80 знак., 12.01.2016 13:31, )
- Тут не думать надо, а в стандарт смотреть. Стандарт говорит, что "2147483648" имеет тип long long int, и точка. Что там эклипс себе придумал, пусть остаётся на его совести. А всё-таки, почему не "long x = -1;"? Это ведь то же самое, но без изврата. - SciFi(12.01.2016 14:04)
- Какой стандарт!!! префиксы, платформонезависимость!!! :) IBAH(59 знак., 12.01.2016 17:17 - 17:32, ссылка)
- Это да, это правильно. Если НЕ ДУМАЯ читать стандарт, то в нем и префиксных операторов не заметишь, и число 2147483648 превратится в (-1) вместо (1<<31), и не влезет ни в поле int32, ни в заявленный компьютерный long64, а потребует целый long Petrovich(813 знак., 13.01.2016 11:42, )
- Хе-хе. Спасибо за призыв думать :-) А я не буду говорить,
куда вам нужно идтичто вам нужно делать :-) SciFi(133 знак., 13.01.2016 11:51 - 11:53)- Да если б я сразу догадался написать, что 2147483648 это (1<<31), то ты, уверен, сразу понял бы, что это не -1, а для внутрикомпиляторного int32 число -2147483648 поэтому к тебе без претензий, ты ж не обязан знать десятичное представление Petrovich(122 знак., 13.01.2016 12:07, )
- Чота меня переклинило про -1. Конечно, имел в виду -2147483648. Ну и всё-таки присваивать (1<<31) целому со знаком - не очень-то комильфо. Для таких дел есть беззнаковые типы. - SciFi(13.01.2016 12:19)
- В Java нет беззнаковых, поэтому и взял 64-бит long. А вообще стояла задача показать юнным программистам Java неявную ошибку, связанную с присвоением разнодлинных типов при распространении знака. За основу взяты наши, похожие микроконтроллерные Petrovich(209 знак., 13.01.2016 12:37, )
- Блин, это жаба? Нет, про жабу не знаю. - SciFi(13.01.2016 12:44)
- В Java нет беззнаковых, поэтому и взял 64-бит long. А вообще стояла задача показать юнным программистам Java неявную ошибку, связанную с присвоением разнодлинных типов при распространении знака. За основу взяты наши, похожие микроконтроллерные Petrovich(209 знак., 13.01.2016 12:37, )
- Чота меня переклинило про -1. Конечно, имел в виду -2147483648. Ну и всё-таки присваивать (1<<31) целому со знаком - не очень-то комильфо. Для таких дел есть беззнаковые типы. - SciFi(13.01.2016 12:19)
- Да если б я сразу догадался написать, что 2147483648 это (1<<31), то ты, уверен, сразу понял бы, что это не -1, а для внутрикомпиляторного int32 число -2147483648 поэтому к тебе без претензий, ты ж не обязан знать десятичное представление Petrovich(122 знак., 13.01.2016 12:07, )
- Хе-хе. Спасибо за призыв думать :-) А я не буду говорить,
- Это да, это правильно. Если НЕ ДУМАЯ читать стандарт, то в нем и префиксных операторов не заметишь, и число 2147483648 превратится в (-1) вместо (1<<31), и не влезет ни в поле int32, ни в заявленный компьютерный long64, а потребует целый long Petrovich(813 знак., 13.01.2016 11:42, )
- Какой стандарт!!! префиксы, платформонезависимость!!! :) IBAH(59 знак., 12.01.2016 17:17 - 17:32, ссылка)
- Тут не думать надо, а в стандарт смотреть. Стандарт говорит, что "2147483648" имеет тип long long int, и точка. Что там эклипс себе придумал, пусть остаётся на его совести. А всё-таки, почему не "long x = -1;"? Это ведь то же самое, но без изврата. - SciFi(12.01.2016 14:04)
- Кхм....А можно пример архитектуры, где int имеет размер 32 байта??? - Evgeny_CD(13.01.2016 13:39)
- Эклипс не прав. Если sizeof(int)==32 и sizeof(long long int)==64, то константа 2147483648 имеет тип long long int. Кстати, а зачем вот это: "long x =(long)2147483648;"? Это такой извращённый способ написать "long x = -1;"? - SciFi(12.01.2016 13:13)
- На персональной ЭВМ, где крутится джава-эклипс, long 64 битный, поэтому не выйдет за ранг. Но тренд наверно хреновый, потому как причина ругани эклипса понятна: сначала формируется константа в его default-int32-формате, и эклипс видит превышение Petrovich(64 знак., 12.01.2016 13:09, )