码迷,mamicode.com
首页 > 编程语言 > 详细

C和指针 第五章 位数组

时间:2016-08-16 21:55:06      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

5.4的习题:编写一组函数,实现维数组,函数原型如下:

//指定位设置为1
void set_bit(char bit_array[], unsigned bit_number);

//指定位清零 void clear_bit(char bit_array[], unsigned bit_number);
//指定位清零,否则设置为1
void assign_bit(char bit_array[], unsigned bit_number, int value);

//参数指定位置为1返回真,为0返回1 int test_bit(char bit_array[], unsigned bit_number);

每个函数第一位是字符数组,实际存储所有的位,第二位参数用于标示,要访问的位,函数的调用者要防止这个值过大,超过数组边界。

//字符偏移
unsigned int char_offset(unsigned bit_number)
{
	return bit_number / CHAR_BIT;
}

//bit位偏移
unsigned int bit_offset(unsigned bit_number)
{
	return bit_number % CHAR_BIT;
}

void set_bit(char bit_array[], unsigned bit_number)
{
	bit_array[char_offset(bit_number)] |= 1 << bit_offset(bit_number);
}

void clear_bit(char bit_array[], unsigned bit_number)
{
	bit_array[char_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)
{
	//对该bit位进行与操作,如果是1则结果还是 1<< (bit_number % CHAR_BIT)
	unsigned isZero = bit_array[bit_number / CHAR_BIT] & (1 << (bit_number % CHAR_BIT));
	if (isZero == (1 << (bit_number % CHAR_BIT))) {
		return TRUE;
	}
	return FALSE;
}

  

C和指针 第五章 位数组

标签:

原文地址:http://www.cnblogs.com/yangxunwu1992/p/5777937.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!