home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_11_11
/
allison
/
bit.c
next >
Wrap
C/C++ Source or Header
|
1993-09-01
|
1KB
|
60 lines
LISTING 4 - Implementation File for bit.h
/* bit.c: Bit operations for unsigned ints */
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include "bit.h"
unsigned fputb(unsigned n, FILE *f)
{
int i;
size_t nb = nbits(n);
/* Print the binary form of a number */
for (i = 0; i < nb; ++i)
fprintf(f,"%d",test(n,nb-1-i));
return n;
}
unsigned fgetb(FILE *f)
{
unsigned n = 0;
size_t nb = nbits(n);
size_t slen;
char *buf = malloc(nb+1);
char format[9];
int i;
if (buf == NULL)
return 0;
/* Build read format (e.g., " %16[01]") */
sprintf(format," %%%d[01]",nb);
if (fscanf(f,format,buf) != 1)
return 0;
/* Set corresponding bits in n */
slen = strlen(buf);
for (i = 0; i < slen; ++i)
if (buf[slen-1-i] == '1')
n = set(n,i);
free(buf);
return n;
}
unsigned count(unsigned n)
{
unsigned sum = 0;
while (n)
{
if (n & 1u)
++sum;
n >>= 1;
}
return sum;
}