то ~0 тоже int, причем отрицательный и ~0 << "что угодно" будет UB (понятно, что компилятор сгенерирует ожидаемый код)...
Я это к тому, что было бы лучше ~0x0 << n, причем обязательно n >=0
просто int, для unsingned надо 1U
0x0 тот же инт, не?
Литерал 0 инт
Это int, потому что он влазит в int. Если бы не влазил, unsigned бы не появлялся, но увеличивалась бы битность типа в который он мог бы влезть => long long int e. t. c. А почему UB? // P.s Для дестичных и hex литералов свои правила, вроде
Обсуждают сегодня