Обнаружил интересный глюк в CodeVision, целый день вчера просидел - думал во мне дело, оказалось, что нет.
Если мы делаем сдвиг и результирующее число выходит из размера 1 байта, то, почему-то, компилятор не преобразует его к int (хотя обязан по стандарту). То есть вот такой код работает непрявильно:
Код
unisigned char s = 243;
//...
unsigned int d = (unsigned int)(s << 4); // d != 3888
а надо так делать, что глупо...
Код
unisigned char s = 243;
//...
unsigned int d = (unsigned int)(((unsigned int)s) << 4); // d = 3888
Интересно, зачем это надо или это просто баг??..