-
- Тут не думать надо, а в стандарт смотреть. Стандарт говорит, что "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)