Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Desplazamiento a nivel de bits

Estas en el tema de Desplazamiento a nivel de bits en el foro de C/C++ en Foros del Web. Hola a todos tengo algunas dudas acerca de como se maneja el signo de los numeros; tengo entendido que, poniendo un ejemplo, el numero -1 ...
  #1 (permalink)  
Antiguo 23/08/2014, 23:37
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 10 años, 1 mes
Puntos: 0
Desplazamiento a nivel de bits

Hola a todos tengo algunas dudas acerca de como se maneja el signo de los numeros; tengo entendido que, poniendo un ejemplo, el numero -1 seria en binario 1111; el MSB representa el signo y seria con complento a dos, ~-1+1 esto seria igual a 1 (-1=1111 ~-1=0000), mi pregunta es como sabe el compilador que esta trabajando con -1 y no con 15.

Bueno ahora segun mi logica XD este seria el numero -1 en C++ en una variable int:

10000000000000000000000000000111

si yo hago:

x=-1;

x=x>>8;

Ese numero en binario seria:

11111111100000000000000000000000


pero al hacer cout<<x; me sigue imprimiendo el valor de -1.

Esa es mi duda no se muy bien como se manejan los signos y tengo entendido que esto >> es un desplazamiento aritmetico y que depende del MSb rellena con 1 o con 0.
  #2 (permalink)  
Antiguo 24/08/2014, 10:08
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Desplazamiento a nivel de bits

Hola amigo.
bueno pues supongo que te sigue mostrando el valor de x por que para hacer un desplazamiento el valor de y debe ser menor que el de x.
aquí te dejo un ejemplo.
Código C:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int signed x = -9;
  6. int signed y = 8;
  7. cout << "el valor es " << (x >> y) << endl;
  8. return(0);
  9. }

Bueno espero que te sea de ayuda.
Saludos.
Drewermerc.
  #3 (permalink)  
Antiguo 24/08/2014, 11:50
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Desplazamiento a nivel de bits

Cita:
Iniciado por Drewermerc Ver Mensaje
Hola amigo.
bueno pues supongo que te sigue mostrando el valor de x por que para hacer un desplazamiento el valor de y debe ser menor que el de x.
aquí te dejo un ejemplo.
Código C:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int signed x = -9;
  6. int signed y = 8;
  7. cout << "el valor es " << (x >> y) << endl;
  8. return(0);
  9. }

Bueno espero que te sea de ayuda.
Saludos.
Drewermerc.

Man tu sabes como se representa por ejemplo el -1 en un int? digamos el int tendria 32 bits de espacio pero en binario como seria este numero?
  #4 (permalink)  
Antiguo 24/08/2014, 12:52
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Desplazamiento a nivel de bits

Hola amigo.
bueno pues para que que se sepa si un bit en + o - se usa el MSB (most significant bit)
ejemplo.

si no especificamos signed o unsigned al declarar un variable por ejemplo int este solo se guardara en 7 bits donde el primer bit es el que dice si se usara el signo o no por ejemplo.

cuando es una variable signe int x;

1 1111111 ------ como el primer bit es 1 entonces esto indica que es que la variable x va a utilizar el signo.
pero si le decimos unsigned int x;
0 1111111 ------ aquí se le dice que no se va usar el MSB y como el primer bit es 0 entonces aquí se le indica que solo se van a tomar valores positivos que serian y se usan los 8 bits completos.

entonces un ejemplo seria para representar el 1 y -1.
10000001 ------ este seria el -1
00000001 ------ y este seria el 1

Bueno no se si me explique bien espero que me hayas entendido.
Saludos.
Drewermerc.
  #5 (permalink)  
Antiguo 25/08/2014, 01:18
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Desplazamiento a nivel de bits

Si se trata de números enteros con signo, la cosa es sencilla: El bit más significativo es el de signo. Si el bit está a 0, el número es positivo, y su valor será el correspondiente a esa secuencia de bits. Si el bit más significativo está a 1, el número es negativo, se hace el complemento a 2 y se cambia de signo. Por ejemplo: (me ciño a 8 bits, pero es aplicable a cualquier número de bits):

0000 0011 = +3
1111 1101 = -3

0000 0001 = +1
1111 1111 = -1

0011 1001 = +57
1100 0111 = -57

Como puedes comprobar, cada número es el complemento a 2 de su correspondiente con el signo cambiado. La operación hay que hacerla con el total de bits correspondiente al tamaño del entero. Por ejemplo, -1 en 32 bits sería 11111111 11111111 11111111 11111111, y -3 = 11111111 11111111 11111111 1111 1101.

En cambio, si se trabaja con enteros sin signo, ya tendríamos (sigo poniendo los ejemplos sobre 8 bits):

1111 1111 = 255 (y no -1)
1111 1101 = 253 (y no -3)
1100 0111 = 199 (y no -57)

Etiquetas: bits, signo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:45.