uint32_t y = 0xFFFFFFFF; // дает -1, я не понимаю, почему это отрицательно?
Причина, по которой это отрицательная причина, потому что, по определению, любое число, в котором установлен старший битовый бит, должно интерпретироваться как отрицательное, когда используется подписанный тип. В вашем случае значение обычно не считается отрицательным, так как uint считается неподписанным.
Следовательно, это означает, что, например:
0xFFFF равен -1, когда рассматривается как 16bit целое число, но такое же значение не является отрицательным при использовании 32 разрядное целого числа.
Компилятор расширяет подпись, если используются соответствующие преобразования. Таким образом, приведенное выше значение все равно станет равным -1, если его соответствующим образом повысить до 32-битного int.
Что вы подразумеваете под "дает -1"? Можете ли вы добавить код, который показывает это на ваш вопрос? – simonc
И как вы его распечатываете? – Mysticial
'uint32_t y = 0xFFFFFFFF;' совпадает с 'uint32_t y = -1;', но это положительное значение ('2^32 - 1'). Как вы напечатали его, чтобы получить выход '-1'? –