Hello Alexander.
19 Jun 07 22:11, Alexander Torres wrote to Yuriy K:AT>>> ------ unsigned char A, B, C, D; //................ AT>>> A=0x0F; AT>>> B=0xF0;
AT>>> C=~B;
AT>>> if ( A= = C) D=1; else D=0; - // работает как положено, т.е AT>>> Д=1. AT>>> if ( A= = ~B ) D=1; else D=0; // - не работает, Д всегда 0. AT>>> if ( A= = (~B) ) D=1; else D=0 // - аналогично. не работает
YK>> if ( A == (unsigned char)(~B) ) { D=1; } YK>> else { D=0; }
AT> Так работает, спасибо.
YK>> Recommended literature: C89 standard, C99 standard, MISRA C.
AT> Да я понимаю, что по стандарту положено все в инт переводить, но AT> учитывая что компилятор для 8-биток, и оба операнда - байты, я ожидал AT> более умного поведения.
Hу, можно еще написать:
D = !((A^B)+1);
Что должно работать для типов любой длины, но это уже извращение :)
Dmitry