Здравствуйте, гость ( Вход | Регистрация )
Iron Bug | Дата 21.4.2010, 14:23 |
и вполне логично переводит его в отрицательное же int'овское число. вот для меня не логично, можешь объяснить?типы char и short в С++ всегда приводятся к типу int при выполнении операций(widening). причём, если их значение помещается в signed int - то используется этот тип, и только если оно превышает возможности типа signed int, значение переводится в unsigned int. в данном случае 0xF8 вполне помещается в signed int и перед выполнением операции приведения типов производится "расширение" типа char к типу signed int, а уже к нему применяется операция приведения. |
|
Litkevich Yuriy | Дата 21.4.2010, 11:23 |
char - знаковый тип да это так. Сейчас я сделал предварительное приведение к unsigned char, но я не понял, почему на прямки к unsigned int нельзя привести.и вполне логично переводит его в отрицательное же int'овское число. вот для меня не логично, можешь объяснить?Полчается что перед явным приведением к unsigned int происходит ещё какое-то неявное приведение? Т.е. первая строка присваивания для меня вполне ожидаемый вариант дала, а вот вторая нет |
|
Iron Bug | Дата 21.4.2010, 11:19 |
столкнулся со странным поведением компилятора. Имеется код: откуда берутся старшие FF'ки?просто объяви массив как unsigned char. иначе у тебя значение 0xF8 компилер рассматривает как отрицательное и вполне логично переводит его в отрицательное же int'овское число. |
|
Tonal | Дата 21.4.2010, 10:50 |
Похоже для твоего компилятора/платформы char - знаковый тип. Т. е. то что тебе нужно получится таким образом:
|
|
Litkevich Yuriy | Дата 21.4.2010, 10:40 |
столкнулся со странным поведением компилятора. Имеется код: откуда берутся старшие FF'ки? |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 28.3.2024, 12:53 |