crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в явное и неявное преобразование встроенных типов
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Iron Bug Дата 21.4.2010, 14:23
 
Цитата(Litkevich Yuriy @ 21.4.2010, 14:23) *
Цитата(Iron Bug @ 21.4.2010, 15:19) *
и вполне логично переводит его в отрицательное же int'овское число.
вот для меня не логично, можешь объяснить?


типы char и short в С++ всегда приводятся к типу int при выполнении операций(widening). причём, если их значение помещается в signed int - то используется этот тип, и только если оно превышает возможности типа signed int, значение переводится в unsigned int.
в данном случае 0xF8 вполне помещается в signed int и перед выполнением операции приведения типов производится "расширение" типа char к типу signed int, а уже к нему применяется операция приведения.
Litkevich Yuriy Дата 21.4.2010, 11:23
 
Цитата(Tonal @ 21.4.2010, 14:50) *
char - знаковый тип
да это так. Сейчас я сделал предварительное приведение к unsigned char, но я не понял, почему на прямки к unsigned int нельзя привести.

Цитата(Iron Bug @ 21.4.2010, 15:19) *
и вполне логично переводит его в отрицательное же int'овское число.
вот для меня не логично, можешь объяснить?
Полчается что перед явным приведением к unsigned int происходит ещё какое-то неявное приведение?

Т.е. первая строка присваивания для меня вполне ожидаемый вариант дала, а вот вторая нет
Iron Bug Дата 21.4.2010, 11:19
 
Цитата(Litkevich Yuriy @ 21.4.2010, 13:40) *
столкнулся со странным поведением компилятора. Имеется код:
char theBuffer[N];
// theBuffer[i] содержит 0xF8

word = theBuffer[i]; // word содержит 0xFFFFFF8F
word = (unsigned int)theBuffer[i]; // word содержит 0xFFFFFF8F
откуда берутся старшие FF'ки?

просто объяви массив как unsigned char. иначе у тебя значение 0xF8 компилер рассматривает как отрицательное и вполне логично переводит его в отрицательное же int'овское число.
Tonal Дата 21.4.2010, 10:50
  Похоже для твоего компилятора/платформы char - знаковый тип.
Т. е. то что тебе нужно получится таким образом:
word = static_cast<unsigned char>(theBuffer[i]);
Litkevich Yuriy Дата 21.4.2010, 10:40
  столкнулся со странным поведением компилятора. Имеется код:
char theBuffer[N];
// theBuffer[i] содержит 0xF8

word = theBuffer[i]; // word содержит 0xFFFFFF8F
word = (unsigned int)theBuffer[i]; // word содержит 0xFFFFFF8F
откуда берутся старшие FF'ки?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 12:53