Я знаю, что он хорошо определен стандартом C, что (unsigned)-1
должен давать 2 ^ n-1, i. е. целое число без знака со всеми его битами. То же самое касается (uint64_t)-1ll
. Однако я не могу найти что-то в стандарте C11, который указывает, как интерпретировать (uint64_t)-1
.
Итак, вопрос: есть ли какая-либо гарантия в стандарте C, какое из следующих утверждений верно?
(uint64_t)-1 == (uint64_t)(unsigned)-1 //0x00000000ffffffff
(uint64_t)-1 == (uint64_t)(int64_t)-1 //0xffffffffffffffff