Необъяснимое поведение

240
15 декабря 2016, 16:07
sourcePicture - объект класса CImage
cout << sourcePicture.GetPitch();             //выводит -2100
cout << sizeof(bgr);                          //выводит 3
cout << sourcePicture.GetPitch()/3;           //выводит -700
cout << sourcePicture.GetPitch()/sizeof(bgr); //выводит 14543789234

Какого чёрта?

Answer 1

Всё очень просто. Следите за типами выражения.

Тип sourcePicture.GetPitch(), судя по всему, signed int. Тип константы 3 есть int, и судя по всему, на вашем компиляторе int есть signed int. Согласно правилам, при делении signed int на signed int тип результат — тоже signed int.

Теперь, тип выражения sizeof(bgr)unsigned int. При делении, согласно тем же правилам, происходит конверсия делимого к unisigned int. Следовательно, результат должен быть такой:

(unsigned int)(-2100) / (unsigned int)3 = 4294965196 / 3 = 1431655065

Проверьте ваш результат, вы пишете 14543789234.

READ ALSO
Правильный абстрактный класс

Правильный абстрактный класс

Помогите, пожалуйста, правильно описать абстрактный класс Block

224
Время выполнения кода

Время выполнения кода

Какую функцию стоит использовать, чтобы получить значение, которое не будет фиксировать время других процессов? Язык С++

257
Сброка QT-приложения linux (Ubuntu)

Сброка QT-приложения linux (Ubuntu)

Пытаюсь собрать приложение, компилятор выдает ошибку:

209
Обработка событий ОС (Linux, X-server)

Обработка событий ОС (Linux, X-server)

Как обрабатывать сообщения операционной системы в одном приложении Qt?

240