Цитата(DMD @ Apr 17 2008, 13:02)

Обнаружил интересный глюк в CodeVision, целый день вчера просидел - думал во мне дело, оказалось, что нет.
Если мы делаем сдвиг и результирующее число выходит из размера 1 байта, то, почему-то, компилятор не преобразует его к int (хотя обязан по стандарту). То есть вот такой код работает непрявильно:
Код
unisigned char s = 243;
//...
unsigned int d = (unsigned int)(s << 4); // d != 3888
Никогда бы и в голову не прошло так приводить типы,естесвенней и проше как написал Сергей.
И насчет компилятора-все-ж написано чистым английским языком:
it is important to note that if the Project|Configure|C Compiler|Code Generation|Promote char to int option isn't checked or the #pragma promotechar+ isn't used, the char, respectively unsigned char, type operands are not automatically promoted to int , respectively unsigned int, as in compilers targeted for 16 or 32 bit CPUs.
This helps writing more size and speed efficient code for an 8 bit CPU like the AVR.
To prevent overflow on 8 bit addition or multiplication, casting may be required.
The compiler issues warnings in these situations.
Варнинги то хоть генерились,или они подавлены?