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

Обнаружил интересный глюк в CodeVision, целый день вчера просидел - думал во мне дело, оказалось, что нет.
Код
unisigned char s = 243;
//...
unsigned int d = (unsigned int)(s << 4); // d != 3888
А по моему - все правилно делает компилятор:
1. Выполняется выражение в скобках - 8-бит переменная сдвигается на четыре бита влево
2. Результат преобразуется к беззнаковому целому.
А вот так:
Код
unisigned char s = 243;
//...
unsigned int d = (unsigned int)(((unsigned int)s) << 4); // d = 3888
1. Выполняется выражение во внутренних скобках -
s преобразуется к беззнаковому целому.
2. Выполняется выражение во внешних скобках - 16-бит беззнаковое целое сдвигается на четыре бита влево
3. Результат преобразуется к беззнаковому целому
Все правильно