Convertir de base 10 a base 2 usando operaciones bitwise

Como en el título, estoy tratando de convertir un número decimal a binario. Establecí el int más bajo cuando pude

char * toBinary(int num) { int i = 1 <>= 1; printf("%d", i); getchar(); } } 

pero no funciona, después de cada turno i sigue siendo un número negativo, ¿qué cambio debo hacer?

Hay varios errores tanto con su código como con su descripción de lo que hace. Aquí hay una versión corregida:

 void print_binary(unsigned x) { for (unsigned bit = 1u << 31; bit != 0; bit >>= 1) putchar((x & bit) ? '1' : '0'); } 

Errores:

  • La función no debe devolver char * , ya que no devuelve nada. Si quieres hacer una función que devuelva una cadena, eso es diferente.

  • No puede calcular 1 << 31 , porque eso es un desbordamiento. Debe usar números sin signo: 1u << 31 está bien (suponiendo que int es de 32 bits).

  • No estás convirtiendo de decimal a binario. El número de entrada ya está en binario, simplemente lo está imprimiendo en binario.

Utilice i sin firmar.

 int i = 1 << 31; 

correcto como

 unsigned int i = 1u << 31; 

Además, en lugar de usar 31 me gustaría sugerirle que escriba un código independiente del tamaño (el tamaño de int puede ser diferente en diferentes máquinas).

Gustar:

 unsigned int mask = 1u << ((sizeof(unsigned int) * CHAR_BIT) - 1); 

He nombrado mask lugar de eso, escribo como este código.

 //conversion unsigned int mask = 1u << ((sizeof(unsigned int) * CHAR_BIT) - 1); while(mask > 0){ if((num & mask) == 0 ) printf("0"); else printf("1") mask = mask >> 1 ; // Right Shift } 

Del comentario de @ Carl Norum : Para escribir correctamente un tamaño de código independiente de la plataforma, use la macro CHAR_BIT definida en el archivo de cabecera limits.h . Tenga en cuenta que CHAR_BIT es el número de bits en char y es posible que en alguna implementación de C un byte no sea ​​igual a 8 bits.

Leer: ¿Qué es CHAR_BIT ?