位集合

#include <stdio.h>
#include <limits.h>
#include <string.h>

unsigned character_offset(unsigned bit_number);
unsigned bit_offset(unsigned bit_number);

/**
 * 将位集合中指定的位设置为0
 */
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)] &=
                ~(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;
}

unsigned
character_offset(unsigned bit_number)
{
        return bit_number / CHAR_BIT;
}

unsigned
bit_offset(unsigned bit_number)
{
        return bit_number % CHAR_BIT;
}

int
main()
{
        char bit_array[10];
        memset(bit_array, 0, 10);
        set_bit(bit_array, 2);
        if(test_bit(bit_array, 2)){
                printf("2-ok\n");
        }
        if(test_bit(bit_array, 3)){
                printf("3-ok\n");
        }
}
时间: 2024-10-19 06:11:33

位集合的相关文章

C++ Primer 学习笔记_14_标准模板库_bitset位集合容器

C++ Primer 学习笔记_14_标准模板库_bitset位集合容器 bitset容器是一个bit位元素的序列容器,每个元素只占一个bit位,取值为0或1,因而很节省内存空间.下图是一个bitset的存储示意图,它的10个元素只使用了两个字节的空间. 使用bitset需要声明头文件"#include <bitset>" 1.创建bitset对象 创建bitset对象时,必须要指定容器的大小.bitset对象的大小一经定义,就不能修改了.下面这条语句就定义了bitset对

wifidog 认证Lighttpd1.4.20源码分析之bitset.c(h) -------位集合的使用

使用一个比特位来表示一个事件的两种状态,即节省内存,又可以提高运行速度.在Lighttpd中,提供了一个bitset数据结构,用来管理使用一个比特位集合. 在bitset.h中,比特位集合的数据结构定义如下: typedef struct { size_t *bits; size_t nbits; } bitset; bits指向一个size_t类型的数组,存放bit集合.size_t类型通常被定义成一个无符号的整型(int或long),其长度和具体的机器有关,这个读者可以查阅相关的资料.nbi

bitest(位集合)------c++程序设计原理与实践(进阶篇)

标准库模板类bitset是在<bitset>中定义的,它用于描述和处理二进制位集合.每个bitset的大小是固定的,在创建时指定: bitset<4> flags; bitset<128> dword_bits; bitset<12345> lots; 默认情况下,bitset被初始化为全0,但通常我们都会给它一个初始值,可以是一个无符号的整数或者"0"和"1"组成的字符串.例如: bitset<4> fl

Python 元组、字典、集合操作总结

元组 a=('a',) a=('a','b') 特点 有序 不可变,不可以修改元组的值,无法为元组增加或者删除元素 元组的创建 a=('a',) a=('a','b') tuple('abcd') 转化为元组 tuple(i for i in range(10)) 生成器推导式转化为元组,生成器推导式产生的生成器对象只能遍历一次 g=( i for i in range(10)) next(g) 单步迭代生成器对象 for i in g: print(i,end='') 直接迭代生成器对象 a=

黑马程序员----java基础---详解Collection集合

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1:集合(Collection) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 对象需要存储 -- 容器(数组和StringBuffer) -- 数组 而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们使用. (2)集合和数组的区别? A:长度区别 数组固定 集合可变 B:内容区别 数组可以是基本类型,也可以是引用类型 集合只能是引用类型

一起学 Java集合框架、数据结构、泛型

一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个层次. 实现(类):是集合接口的具体实现.从本质上讲,它们是可重复使用的数据结构. 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序.这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现. 集合接口 序号 name 接口描述 1 Collection Col

java中的最重要的 集合框架

java.util这个重要的包包含大量的类和接口,支持很多的功能.例如,java.util具有能产生伪随机数的类,还包括可以管理日期和时间.观察事件.操作位集合.标记字符串.处理格式化数据等的类.java.util包也包含了Java中功能最强大的子系统之一:集合框架(collections Framework). 以下将分析集合框架中的接口和类. 集合接口: Collection 允许处理一组对象,它位于集合层次结构的项部 Deque 扩展Queue接口,以处理双端队列 List 扩展Colle

位运算及其应用实例(1)

摘要 位运算是C/C++中的基本运算之一,即便是这样,它对大多数程序员来说是一个比较陌生的运算——大多数程序员很少使用位运算.本篇先简要介绍基本的位运算操作符及其用法(何时使用),然后介绍位运算符的几个典型应用: (1)      三种不用临时变量交换两个整数的实例,并分析每个实例的优缺点 (2)      进制转换,通过位运算实现将十进制数按二进制和十六进制输出,并得出一个通用的,用于将十进制按照2的n次方进制输出的程序. (3)      给出利用位运算实现的计算整数的二进制表示中有多少个1

计算机中的位运算

位运算是C/C++中的基本运算之一,即便是这样,它对大多数程序员来说是一个比较陌生的运算——大多数程序员很少使用位运算.本篇先简要介绍基本的位运算操作符及其用法(何时使用),然后介绍位运算符的几个典型应用: (1)      三种不用临时变量交换两个整数的实例,并分析每个实例的优缺点 (2)      进制转换,通过位运算实现将十进制数按二进制和十六进制输出,并得出一个通用的,用于将十进制按照2的n次方进制输出的程序. (3)      给出利用位运算实现的计算整数的二进制表示中有多少个1的实例