home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / lang / c / 16078 < prev    next >
Encoding:
Text File  |  1992-11-07  |  1.7 KB  |  97 lines

  1. Path: sparky!uunet!zaphod.mps.ohio-state.edu!magnus.acs.ohio-state.edu!usenet.ins.cwru.edu!agate!doc.ic.ac.uk!anb
  2. From: anb@doc.ic.ac.uk (A N Burton)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: How to print an integer as binary?
  5. Date: 6 Nov 1992 14:34:21 GMT
  6. Organization: Department of Computing, Imperial College, University of London, UK.
  7. Lines: 84
  8. Distribution: world
  9. Message-ID: <1ddvpdINNc3d@frigate.doc.ic.ac.uk>
  10. References: <1992Nov4.180622.6568@csd.uwe.ac.uk> <1dbpe8INNcop@frigate.doc.ic.ac.uk> <a_rubin.720993308@dn66>
  11. NNTP-Posting-Host: mfast.doc.ic.ac.uk
  12.  
  13.  
  14. Many thanks to those who pointed out errors etc in my code.
  15.  
  16. What I hope are more correct versions of the functions appear below.
  17.  
  18. Ariel BURTON
  19.  
  20.  
  21.  
  22.  
  23. #include    <stdio.h>
  24. #include    <limits.h>
  25.  
  26.  
  27. void
  28. aux1( long x ){
  29.     if( x ){
  30.         aux1( x / 2 );
  31.         putchar( (x%2) ? '1' : '0' );
  32.     }
  33. }
  34.  
  35. void
  36. PrintBinary1( long x ){
  37.     if( 0 == x )
  38.         putchar( '0' );
  39.     else{
  40.         if ( x < 0 )
  41.             putchar( '-' );
  42.         else
  43.             x = -x;
  44.         aux1( x );
  45.     }
  46. }
  47. #define MAX_SIZE ( CHAR_BIT * sizeof( long ) )
  48. void
  49. PrintBinary2( long x ){
  50.     char    buff[ MAX_SIZE+1 ];
  51.     int    i;
  52.  
  53.     if( ! x )
  54.         putchar( '0' );
  55.     else{
  56.         if( x < 0 )
  57.             putchar( '-' );
  58.         else
  59.             x = -x ;
  60.  
  61.         buff[ i = MAX_SIZE ] = '\0';
  62.         for( ; x ; x /= 2 )
  63.             buff[ --i ] = (x%2) ? '1' : '0';
  64.  
  65.         printf( "%s", buff+i );
  66.     }
  67. }
  68.  
  69. void
  70. PrintBinary3( long x ){
  71.     unsigned long    mask = (((unsigned long)(-1)) >> 1 ) + 1;
  72.  
  73.     if( ! x )
  74.         putchar( '0' );
  75.     else{
  76.         if( x < 0 ){
  77.             putchar( '-' );
  78.             x = -x;
  79.         }
  80.  
  81.         for( ;  ! (x & mask) ; mask >>= 1 )
  82.             ;
  83.  
  84.         for( ; mask ; mask >>= 1 )
  85.             putchar( x & mask ? '1' : '0' );
  86.     }
  87. }
  88.  
  89. main( int argc, char *argv[] ){
  90.     PrintBinary1( atol(argv[1] ) );
  91.     putchar( '\n' );
  92.     PrintBinary2( atol(argv[1] ) );
  93.     putchar( '\n' );
  94.     PrintBinary3( atol(argv[1] ) );
  95.     putchar( '\n' );
  96. }
  97.