#include <stdio.h>
#include <limits.h>
unsigned character_offset( unsigned bit_number );
unsigned bit_offset( unsigned bit_number );
void set_bit( char bit_array[], unsigned bit_number );
void clear_bit( char bit_array[], unsigned bit_number );
void assign_bit( char bit_array[], unsigned bit_number, int value );
int test_bit( char bit_array[], unsigned bit_number );
unsigned character_offset( unsigned bit_number )
{
return bit_number/CHAR_BIT;
}
unsigned bit_offset( unsigned bit_number )
{
return bit_number%CHAR_BIT;
}
void set_bit( char bit_array[], unsigned bit_number )
{
bit_array[character_offset(bit_number)] |= 1<<bit_offset(bit_number);
}
void clear_bit( char bit_array[], unsigned bit_number )
{
//bit_array[character_offset(bit_number)] = ~( (~bit_array[character_offset]) | (1<<bit_offset) );
bit_array[character_offset(bit_number)] &= ~( 1<<bit_offset(bit_number) );
}
void assign_bit( char bit_array[], unsigned bit_number, int value )
{
if(value != 0)
set_bit(bit_array,bit_number); //
else
clear_bit(bit_array,bit_number);
}
int test_bit( char bit_array[], unsigned bit_number )
{
return (
bit_array[character_offset(bit_number)] &
1<<bit_offset(bit_number)
) != 0;
}
int main()
{
char bit_array[10] = "123456789";
clear_bit( bit_array, 7 );
set_bit(bit_array, 8);
test_bit( bit_array, 6);
printf( "%c",bit_array[1]);
return 0;
}
昨天看了C和指针的第五章,把后面习题的位数组实现了下。不过没怎么测试。