Почему вы ожидали получить «максимальное значение»? В представлении со знаком «2 дополнения» битовый шаблон «все 1» обозначает -1
. Это просто так.
Максимальное значение в представлении со знаком 2-го дополнения представлено 01111...1
битовой комбинацией (то есть первый бит 0
). То, что вы получили, это 1111...1
, что, очевидно, отрицательно, поскольку самый первый бит - знаковый бит - это 1
.
Если вам нужен пример, где дополненный ноль дает «максимальное значение», используйте unsigned представление
int main() {
unsigned max = ~0u;
printf("%u\n", max);
}