Цитата(Gogan @ Dec 28 2007, 16:21)

Есть вот такой проргамный код для АВР(например):
unsigned char a = 100;
float b = 20;
далее в программе
if( b < -a ){...}
так вот оказывается, в таком случаее условие выполняется.
Если кастовать вот так :
if( b < - (int) a ) {...}
тогда все ок. Объясните почему? Я не могу понять, что с чем сравнивается, если не кастовать, и почему так происходит?
так происходит потому, что тип переменной а unsigned. отрицание вовсе не меняет этот тип, а просто устанавливает старший бит (получается 100 + 128 = 228), после чего производится беззнаковое сравенине. если Вы будете приводить а к типу unsigned int, будет то же самое