Как сказали Тим и Влад, вы ничего не делаете с побитовой инверсией.
Даже если вы измените код на a = ~a;
, вы можете не получить ноль. Это потому, что если unsigned int
имеет более 16 битов, вы будете иметь начальные нули, которые станут 1 после инверсии.
Так что я ожидаю, что ваш вывод будет
FFFF0000
или даже
FFFFFFFFFFFF0000
Если вам нужны 16-битные побитовые операции, вы можете использовать
#include <inttypes.h>
uint16_t a;