C和指针 第五章 位数组
2024-10-14 04:18:54
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;
}
最新文章
- Listener监听器与Filter过滤器
- [POJ1003]Hangover
- 贵州大学iPhone、Android(安卓)项目助跑计划!!!
- Ubuntu ENet 的下载和编译
- Android 菜单(OptionMenu)大全 建立你自己的菜单
- 利用ItextPdf、core-renderer-R8 来生成PDF
- 使用jquery获取ul的li的值赋值
- PXE+kickstart无人值守安装CentOS 6
- Mybatis源码分析-BaseExecutor
- 【Kafka源码】处理请求
- 前端加密传输 crypto-js AES 加密和解密
- mysql--表数据操作
- 就是要用Vim写Vue
- Just Oj 2017C语言程序设计竞赛高级组A: 求近似值(矩阵快速幂)
- js call 理解
- udp套接字及利用socketserver模块实现并发以及并发编程
- 《C#从现象到本质》读书笔记(五)第5章字符串第6章垃圾回收第7章异常与异常处理
- 【转】 Apk文件及其编译过程
- vs2017_enterprise正式版离线安装包bt下载
- [iOS问题归总]iPhone上传项目遇到的问题