Problema con manipuladores de bits

DMH

Pues nada estoy empezando a aprender C y e echo un pequeño programa que cambia los bits de un numero entero de 0 a 1 y respectivamente:

#include <stdio.h>
main()
{
int a, b;
printf("Introdueix un nombre enter decimal\n");
scanf("%d", &a);
a;
b=a;
printf("El resultat de passar a 0 els bits que estan a 1 y \nrespectivament dona el resultat %d",&b);
scanf("%d",&b);
}

pero tengo un pequeño problemilla siempre me da el mismo resultado ponga el numero que ponga me sale un 2293608 a ver si alguien me puede ayudar thx

Carcass

A printf le tienes que pasar el valor de b, no la dirección :-P

Y el a ahí suelto no hace nada... si acaso pon b=a

int a, b;
printf("Introdueix un nombre enter decimal\n");
scanf("%d", &a);
b=a;
printf("El resultat de passar a 0 els bits que estan a 1 y \nrespectivament dona el resultat %d", b);
scanf("%d",&b);

DMH

ahora compilo y si pongo 50 me sale -51 de resultado y asi siempre y si no calculo mal al hacer el cambio de bits me tendria que dar 12

maRc

Hombre, supongo que eso cambia el bit de signo, por lo que el número pasa a ser negativo.

No se en que formato trabajan, pero supongo que es en Ca2. Si el número es:
50 = 00000...0110010, al invertir los bits nos queda así:
11111...1001101, que para saber que número es, volvemos a cambiar los bits (excepto el de signo), que queda otra vez como 50, y le sumamos 1 (por ser Ca2), que resulta 50+1 = 51. Como el bit de signo es 1, es -51.

LOc0

Lo que dice #4, es C-2.

Salu2 ;)

guiye

A lo mejor es pq lo pones en catalán xD

DMH

si podeis poner alguna pagina donde haya informacion sobre el formato C-2 os lo agradeceria.

maRc

Te explico como va.

El Ca2 es un formato de representación de enteros y se basa en lo siguiente:
-Para números positivos, el bit de signo (el primer bit por la izquierda), es 0. El resto de bits se representan tal cual es el número en formato binario. Por ejemplo, el número 43 es:
0-000...0101011: El primer '0' se corresponde con el bit de sign. El resto de '0' hasta llegar a '101011', son '0' de relleno hasta completar el número de bits totales (por ejemplo, si el formato es de 32 bits, para que el número total de bits sea 32).

-Para números negativos, la cosa cambia. Primero, el bit de signo cambia a 1. El resto de bits, se invierten y se les suma 1. Para el número -43 es:
*El número 43 en binario es '000...0101011'. Para pasarlo a -43, invertimos los bits '111...1010100', y le sumamos '1', por lo que queda '111...1010101'.

Los números reales se representan siguiendo otros formatos, como por ejemplo el IEEE 754 (más largo de explicar).

Weno, por si no te ha quedado claro, mira este pdf:
http://poseidon.disca.upv.es/etc1/ficheros/presentaciones/Tema6_ETC1FCO-Val.pdf
En castellano:
http://poseidon.disca.upv.es/etc1/ficheros/presentaciones/Tema6_ETC1FCO.pdf

Usuarios habituales

  • maRc
  • DMH
  • guiye
  • LOc0
  • Carcass