Sua asserção inicial não é realmente verdadeira, não para a grande maioria das arquiteturas de CPU que possuem algo parecido com o uso comum - que usa "aritmética de complemento de dois".
Na aritmética de complemento de 2, se o bit de alta ordem for 1, isso indica um número negativo; mas se o bit de alta ordem for 0, isso não indica um número positivo. Indica não negativo . A diferença é sutil, mas importante. O número pode ser zero ou pode ser positivo.
No complemento de 2, a escala numérica se parece com isso - eu usarei números inteiros de oito bits para simplificar:
binary signed unsigned 01111111 127 127 01111110 126 126 ... 00000011 3 3 00000010 2 2 00000001 1 1 00000000 0 0 11111111 -1 255 11111110 -2 254 ... 10000010 -126 130 10000001 -127 129 10000000 -128 128
Para negar (inverter aritmeticamente) um número neste sistema, isto é, multiplicá-lo por -1: primeiro você inverte todos os bits e, em seguida, adiciona 1. Então, se começarmos com 1 e invertermos os bits, obtenha 11111110. Adicione 1 e nós temos 11111111. Como acima. Observe que, se fizermos isso novamente, voltaremos para 00000001, como deveríamos.
Os computadores usam esse sistema porque torna a lógica de adição, subtração, etc., aritmética muito simples: A mesma lógica (somadores binários simples; você apenas adiciona todos os bits, incluindo os bits de sinal) funciona para números assinados e não assinados . Observe que adicionar 1 a qualquer número nessa escala leva você à resposta correta ... exceto nos casos de estouro: Adicionar de 1 a 127 resulta em -128, se você estiver interpretando os números como assinados. Mas transborda e transporta e assim por diante são geralmente capturados por sinalizadores de condição ou exceções.
É uma peculiaridade curiosa do complemento de dois que temos mais um número negativo do que positivo ... já que o zero não é nem negativo nem positivo. Portanto, com oito bits, assinados, podemos representar -128, mas não +128. +127 é o maior número positivo. Isso não é um grande problema.
Alguns computadores históricos (séries CDC 3000 e 6000, e alguns mainframes Univac antigos; não conheço exemplos contemporâneos) foram construídos e usaram o "complemento de alguém". Em complemento, para inverter um número, basta virar os bits. Isso resulta em quase a mesma escala acima, exceto que o lado negativo vai de -127 a ... -0! É isso mesmo, em um comp. máquinas, você tem dois zeros: zero positivo e zero negativo. Isso torna a aritmética geralmente mais complicada. Zeros negativos são geralmente convertidos em positivos em algum momento.
Você provavelmente está pensando que deveria ser mais como "magnitude assinada", que é análoga à forma como normalmente escrevemos os números. por exemplo. -2 seria 10000002. Você notará que adicionar 1 a isso não fornece a representação correta de magnitude sinalizada para -1. Dá-lhe -3 em seu lugar. Isso torna a aritmética mais complicada de se fazer, e é por isso que ela não é usada.