您当前的位置:首页 > 计算机 > 编程开发 > C语言

位操作的接口定义

时间:12-30来源:作者:点击数:

位操作对于数据压缩来说非常重要。在压缩和解压缩数据时,常常需要在小于一个字节的数量级上进行数据操作。因此,在讨论各种数据压缩方法之前,首先必须要熟悉一些对数据位进行的操作。这些操作非常重要,因为C语言本身只有一小部分内在的、不可分割的操作数。本节展示的方法包含了对任意位的缓冲区的操作。请注意,这里介绍的操作是相当不完整的。

位操作的接口定义

1) bit_ get

int bit_get(const unsigned char *bits, int pos);

返回值:相应位所处的状态(1或0)。

描述:获取缓冲区bits中处于位置pos的位的状态。缓冲区最左边的位置为0。返回的状态值为0或1。

复杂度:O(1)

2) bit_set

void bit_set(unsigned char *bits, int pos, int state);

返回值:无

描述:设置缓冲区bits中处于位置pos的位的状态(根据state值来设置)。缓冲区最左边的位置为0。状态值必须为0或1。

复杂度:O(1)

3) bit_xor

void bit_xor(const unsigned char *bits1, const unsigned char *bits2, unsigned char *bitsx, int size);

返回值:无

描述:按位计算两个缓冲区bits1与bits2的异或值,其中每个缓冲区包含size个位, 然后将结果返回bitsx中。按位异或的过程是将两个二进制操作数进行运算,如果操作数中处于位置i的两位相同,得到0;如果处于位置i的两位不同,则返回1。例如:11010⊕01011=10001 (⊕表示异或)。bitsx所需要的存储空间由函数调用者来管理。

复杂度:O(β),其中β为每个缓冲区中位的个数。

4) bit_rot_left

void bit_rot_left(unsigned char *bits, int size, int count);

返回值:无

描述:轮转缓冲区bits(含size位),将位值向左移count位。此操作完成后,处于最左端的count位移动到缓冲区最右端,而且其他的位也相应地轮转。

复杂度:O(nβ),其中β为每个缓冲区中位的个数,n为要轮转到左边的位数。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门