Originariamente inviato da GabbOne
perchè non ci spighi un po meglio come funziona la tua funzione .
Ok, non c'è problema:

codice:
1.  #define LEN_BINSTR_INT    (sizeof (int)*8)
2. 
3.  char *binstr_int (char *bufout, int value)
4.  {
5.      unsigned int m;
6.      char *ret = bufout;
7.
8.      for (m=1<<(LEN_BINSTR_INT-1); m!=0; m>>=1)
9.          *bufout++ = value & m ? '1' : '0';
10.     *bufout = '\0';
11.
12.     return ret;
13. }
1. definisco una nuova costante il cui valore rappresenta il numero di bit in un int. Avendo usato sizeof, il valore si "aggiusta" da solo. Se su una certa piattaforma un int è di 64 bit, allora la costante vale 64 (8*8) e così via.

5. la variabile 'm' serve come "maschera" da usare per testare un singolo bit del valore in input. Il valore contenuto in 'm' avrà sempre un solo bit a 1.

6. ret è il puntatore da restituire che punta all'inizio del buffer (questo per convenienza).

8. il ciclo for usa la variabile 'm' (la maschera) per determinare la ripetizione del ciclo. All'inizio 'm' viene impostato in modo da avere il bit più significativo a 1 (quindi 10000.....0). Ad ogni ciclo, 'm' viene shiftato, spostato (m>>=1) a destra di 1 bit (quindi 0100...0 poi 00100....0, ecc...) fino a quando l'ultimo shift butta fuori il 1 e quindi 'm' vale poi 0.

9. per ogni locazione successiva nel buffer, viene scritto il carattere '1' o '0' a seconda se il bit mascherato da 'm' è 1 oppure 0.

10. viene "appeso" al fondo della stringa il carattere nullo.