Pasar de entero a binario en C

/*
Implementar una funcion que pase de enteros a binarios con mascaras de bits
*/


#include<stdio.h>

void bitprint (int n);
void c2 (int n);

int main(int argc,char *argv[]){
  
    int k;
    printf("Introduce un número: ");
    scanf("%d", &k);
    bitprint(k);
    c2(k);
    return 0;
}


void bitprint (int n){

  int i, mascara;

  mascara = 1;    /* 00...001 */

  mascara = mascara << ((sizeof(int) * 8) - 1);   /* 10...000 */

  /* se desplaza el "bit" 1 hacia
  el extremo más significativo */
 
  for ( i = 0; i < (sizeof(int) * 8); ++i ) {
 
 /* alternativa al if..else */
   /* putchar( ((n & mascara)==0) ? '0' : '1' ); */
 if(!( n & mascara))
 {
  printf("0");
 }
 else
 {
  printf("1");
 }

    /* Otra opción : 

     if( n & mascara)
     {
         printf("1");
     }
     else
     {
         printf("0");
     }

        */
 
 n=n<<1;
  }


  printf("\n");
  return;
}



void c2 (int n){
    
    int i, mascara, ceros=1;
    
    mascara = 1;    /* 00...001 */
    
    
    
    /* Recorro los bits del número */
    
    for ( i = 0; i < (sizeof(int) * 8); ++i ) {
        
         if( n & mascara)
         {
             if(ceros==1){
                 ceros=0;
             }
             else
                 n=n&(~mascara);
             
         }
         else
         {
             if(ceros==0){
                 n=n|mascara;
             }
             
         }
        
        
         mascara=mascara<<1;
    }
    
    printf("El número negativo es %d\n", n);
    bitprint(n);
    return;

}