[C con Clase] Duda con el 0

Steven R. Davidson vze266ft en verizon.net
Mar Mar 18 08:08:10 CET 2008


Hola David,

David Reza wrote:
> El 0 (cero) en C++ es un número positivo o negativo?
> 
> Lo pregunto por lo del asunto de que las variables 'signed',  
> dependiendo del tipo que sean pueden tener ciertos valores entre  
> números negativos y números positivos, pero siempre el negativo es el  
> valor positivo menos una unidad.
> 
> Por ejemplo, en una variable 'signed char' puedo almacenar un número  
> entre -127 y 128, lo que me hace pensar que los positivos son del 1 al  

No. El intervalo correcto es: -128 á +127.

> 128 (128 en total) y los negativos son del 0 al -127 (128 en total),  
> pero internamente el 0 se podría representar como 0000000; en este  
> caso no se utiliza el último bit como signo menos y entonces se  
> contradice mi pensamiento de que el cero es negativo.
> 

Efectivamente, el 0 (cero) se considera positivo. En primer lugar, como 
has dicho, el bit de signo es 0 indicando que es positivo. Por otro 
lado, si intentáramos aplicar el complemento de 2, obtendríamos,

0 = 00000000
complemento de 1 => 11111111
complemento de 2 => 11111111 + 1 = 00000000

Como puedes ver, acabamos con la misma representación que la que empezamos.

> Hay otra forma en la que se puede representar internamente el 0,  
> utilizando el último bit como signo menos?
> 

Usando las representanciones existentes e implementadas, no. Si 0 
valiese otra cosa, existirían varios problemas a la hora de programar e 
implementar código.


Espero haber aclarado la duda.

Steven






Más información sobre la lista de distribución Cconclase