Результата ~b
имеет расширенный типа int
(Вообще результат b
с любым другим унарным +
, -
или ~
), так что вам нужен типаж результата.
Из C11 спецификации проекта разделе 6.5.3.3 Унарное арифметический оператор:
Результат ~ оператор является побитовое дополнение его (способствовало) операнд (то есть, каждый бит в результат устанавливается, если и , только если соответствующий бит в преобразованном операнде не установлен). Целевые рекламные акции выполняются в операнде, а результат имеет продвинутый тип. Если промотированный тип является неподписанным типом, выражение ~12 эквивалентно максимальному значению, представляемому в этом типу минус E.
Так,
unsigned char b = 0x00;
/* ~b = 0xFFFFFFFF (assuming 4 byte int), (unsigned char)~b = 0xFF */
Спасибо, я не знал об этом! – user3482407
Я рад, если вам это поможет. –