[C con Clase] Preguntas sobre bits y números negativos

David Reza l.fix3r.l en gmail.com
Mie Nov 28 23:36:31 CET 2007


Bueno, pues me prestaron un libro de C++ y estaba leyendo que los números
enteros que caben en un byte van del -128 al 127, debido a que 1 byte
contiene 8 bits. Esto ya lo sabía y hasta aquí va todo bien.

Si hacemos el cálculo 2^8 el  resultado es de 256. Esto quiere decir que en
8 bits cabe un número del rango 0 a 255, ya que el cero también se cuenta.

Yo sabía que el signo se almacenaba en el bit de mayor magnitud, es decir,
el primero de izquierda a derecha, en este caso en el octavo bit (128, unas
lineas abajo). Yo sólo sabía que por ejemplo el número 128 se representaba
en binario de la siguiente forma:

128 | 64 | 32 | 16 | 8 | 4 | 2 | 1
  1     0     0    0   0   0   0   0

Es decir, 10000000, pero el libro dice que el octavo bit siempre será
negativo, por lo tanto si se utiliza (contiene un 1), todo el número será
negativo, y si no se utiliza (contiene un 0), significa que el número será
positivo.

Por lo tanto, como se está utilizando el octavo bit (contiene un 1), el
número es negativo y este número no es 128, si no, -128.

Ya que:

  128  | 64 | 32 | 16 |  8  |  4  | 2 | 1
 -128 + 0  + 0 +  0 + 0 + 0 + 0 + 0 = -128

Y para representar el -126, por ejemplo, sería:

10000010

Ya que:
-128 + 0 + 0 + 0 + 0 + 0 + 2 + 0 = -126

Y el número 127 se representaba: 01111111
En donde el octavo bit no está activado y por lo tanto el número es
negativo.

Mi pregunta es qué tan cierto es esto? Y por qué se supone que el código
ASCII de 8 bits llega hasta el 255?

Es por cuestión de que se declare 'con signo' o 'sin signo'?
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20071128/b9a4f3d5/attachment.html>


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