явное и неявное преобразование встроенных типов |
Здравствуйте, гость ( Вход | Регистрация )
явное и неявное преобразование встроенных типов |
Litkevich Yuriy |
21.4.2010, 10:40
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
столкнулся со странным поведением компилятора. Имеется код:
откуда берутся старшие FF'ки?
|
|
|
Tonal |
21.4.2010, 10:50
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Похоже для твоего компилятора/платформы char - знаковый тип.
Т. е. то что тебе нужно получится таким образом:
|
|
|
Iron Bug |
21.4.2010, 11:19
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
столкнулся со странным поведением компилятора. Имеется код: откуда берутся старшие FF'ки?просто объяви массив как unsigned char. иначе у тебя значение 0xF8 компилер рассматривает как отрицательное и вполне логично переводит его в отрицательное же int'овское число. |
|
|
Litkevich Yuriy |
21.4.2010, 11:23
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
char - знаковый тип да это так. Сейчас я сделал предварительное приведение к unsigned char, но я не понял, почему на прямки к unsigned int нельзя привести.и вполне логично переводит его в отрицательное же int'овское число. вот для меня не логично, можешь объяснить?Полчается что перед явным приведением к unsigned int происходит ещё какое-то неявное приведение? Т.е. первая строка присваивания для меня вполне ожидаемый вариант дала, а вот вторая нет |
|
|
Iron Bug |
21.4.2010, 14:23
Сообщение
#5
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
и вполне логично переводит его в отрицательное же int'овское число. вот для меня не логично, можешь объяснить?типы char и short в С++ всегда приводятся к типу int при выполнении операций(widening). причём, если их значение помещается в signed int - то используется этот тип, и только если оно превышает возможности типа signed int, значение переводится в unsigned int. в данном случае 0xF8 вполне помещается в signed int и перед выполнением операции приведения типов производится "расширение" типа char к типу signed int, а уже к нему применяется операция приведения. |
|
|
Текстовая версия | Сейчас: 28.11.2024, 23:25 |