Код: Выделить всё
uint16 geta() { return 2; }
uint16 getb() { return 0xFFFD; }
bool cmp() { return geta() == ~getb(); }
Да, я заранее проверил что 2 == ~0xFFFD, но как вы думаете, что вернет cmp() ? А cmp() возвращает всегда false. Причина в неявном и непонятном приведении типа. ~getb() cстановится int'ом, хотя сам getb() был uint16. Если переписать вот так
Код: Выделить всё
uint16 geta() { return 2; }
uint16 getb() { return 0xFFFD; }
bool cmp() { return geta() == (uint16)~getb(); }
То все работает. Внимание вопрос - откуда берется такое хитрое преобразование типов?