zoukankan      html  css  js  c++  java
  • C和指针 第五章 位数组

    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;
    }
    

      

  • 相关阅读:
    CSDN博客QQ加群、微信
    Angularjs 中的 controller
    hdu 1728 逃离迷宫 bfs记转向
    【BLE】CC2541之加入自己定义任务
    asp.net给文件分配自己主动编号,如【20140710-1】
    <html>
    机器学习入门阶段程序猿易犯的5个错误
    时间复杂度
    Jackcard类似度和余弦类似度(向量空间模型)的java实现
    【分层图】分层图学习笔记
  • 原文地址:https://www.cnblogs.com/yangxunwu1992/p/5777937.html
Copyright © 2011-2022 走看看