Я пытаюсь выяснить, почему следующий код:Как компилятор рассматривает печать unsigned int как подписанный int?
{
unsigned int a = 10;
a = ~a;
printf("%d\n", a);
}
a
будет 00001010
для начала, и после того, как НЕ opertaion, превратит
в 11110101
.
Что происходит именно тогда, когда один пытается напечатать a
, как знаковое целое, что делает
напечатанный результат будет -11
?
Я думал, что в конечном итоге вижу -5
возможно (согласно двоичному представлению), но не -11
.
Буду рад получить разъяснения по этому вопросу.
Благодарим вас за подробный и ясный ответ :) – Adiel
Комментарий педантизма: C не требует дополнения 2s. Он даже не указывает, как сохраняются числа. x86 и ARM, однако, используйте дополнение 2s –