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

Info DSD info en dysd.com.ar
Jue Nov 29 03:22:38 CET 2007


Hola

 

Un numero con signo de 8 bits va de -128 a 127, como en el caso de los char,
en cambio, el codigo ASCII va de 0 a 255 por que no se necesita el signo
para representar el carácter.

 

Esta bien lo que decis: 10000000 = -128 y 01111111 = 127

 

Fijate en esto: un unsigned int de 16 bits va de 0 a 65535, un int de 16
bits va de -32.768 a 32.767, un unsigned int de 32 bits va de 0 a
4.294.967.295 y un int de 32 bits va de -2.147.483.648 a 2.147.483.647

 

Si te tomas el trabajo de convertir estos valores (con la calc de win para
que sea rapido) a binario, vas a ver que el bit mas signif es el del signo.

 

Saludos.-

 

  _____  

De: cconclase-bounces en listas.conclase.net
[mailto:cconclase-bounces en listas.conclase.net] En nombre de David Reza
Enviado el: Miércoles, 28 de Noviembre de 2007 07:37 p.m.
Para: Lista de correo sobre C y C++
Asunto: [C con Clase] Preguntas sobre bits y números negativos

 

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/bdc8771d/attachment.html>


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