Большинство современных систем используют two's complement для представления целочисленных типов данных со знаком. В этом представлении одно состояние в положительной стороне используется для представления нуля, поэтому одно положительное значение меньше отрицательных. На самом деле это одно из главных преимуществ этой системы над системой sign-magnitude, где нуль имеет два представления, +0 и -0.
Давайте возьмем небольшой тип данных, скажем шириной 4 бита, чтобы понять это лучше. Число возможных состояний с этим целым типом игрушки было бы равно 2⁴ = 16 состояний. При использовании двух дополнений для представления числа со знаком мы имели бы 8 отрицательных и 7 положительных чисел и ноль.
Bin Dec
0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = -8
1001 = -7
1010 = -6
1011 = -5
1100 = -4
1101 = -3
1110 = -2
1111 = -1
Я думаю, вы сбиты с толку, так как вы воображаете, что знак знаковой величины используется для подписанных чисел; хотя это также допускается языковыми стандартами, эта система с меньшей вероятностью будет реализована, поскольку система комплемента двух значительно лучше отражает представление.
есть «2^32» возможные способы установки 32 бит. Если вы не хотите тратить никого из них, то это диапазон с четным количеством элементов в нем. Однако диапазон от -X до X (для некоторого числа X) имеет нечетное число элементов. –
Система, которую вы описываете (которая называется * знак-величина *), уничтожает случай знака-бита 1 и всех остальных битов 0. Раньше некоторые компьютеры использовали эту систему в любом случае, но сейчас это редко. –
То, что вы описываете, - это [система знаков знака и величины] (https://en.wikipedia.org/wiki/Signed_number_representations#Signed_magnitude_representation). Это работает нормально, но означает, что вы можете иметь '+ 0' и' -0'. Так что почти все компьютеры используют [два дополнения] (https://en.wikipedia.org/wiki/Signed_number_representations#Two.27s_complement), потому что есть только один '0' (он не является ни положительным, ни отрицательным, просто нулевым), и это имеет некоторые удобные последствия, когда речь идет о двоичной арифметике. – Cornstalks