не так давно говорили.
Бывают случаи, когда для char (~x) по действиям не всегда эквивалентно (x^0xff)."~" , собака, смотрит на размер, а ^ нет...
#define ABC 1
int main( void ){
unsigned char x = 0x01;
if( (~x) == (~ABC) ) printf("~ == ~ %d\n", x); // !!!!!!!!!!
else printf("~ != ~ %d\n", x);
if( (x^0xff) == (~ABC) ) printf("^ == ~ %d\n", x);
else printf("^ != ~ %d\n", x); // !!!!!!!!!!
return 0;
}
Или жгу под вечер? :)))