-
- Кхм....А можно пример архитектуры, где 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)