本文主要论述了用c语言数组实现二进制位的几种操作。
位数组主要是存储为有效利用内存空间而设计的数据的方式。 在该结构中,一个整数在内存中用1位(1位)表示。 这里的表示是指如果存在整数,则对应的二进制比特为1,否则为0。
主要思想:我们知道char类型的数据在内存中消耗1字节,即8位。 用二进制位在内存中的顺序表示整数可以存储更多的信息。
这样,一个char类型可以包含8个整数。 也就是说,第一个二进制位表示整数0,第二个二进制位表示整数1。
更大的整数怎么表示呢?
可以通过char数组解决此问题。 假设a是char数组,则整数8可以由a[1]的第一个二进制位表示。
其中重要的是,一个char类型表示八个整数。
实现利用char数组实现的二进制数组。 主要有以下三种方法。
(1)在二进制数组的add_to_bitarray(char*,int )中添加整数
此方法的主要作用是将二进制数组中表示整数的位置设置为1。 首先,必须找到此整数位于char数组的第几个元组中。 这里,整数除以8就可以了。 (如果在代码中除以8,则用右移位的3位实现。 例如,整数25位于25/8=3之外的1,表示该整数由char数组的第三个元组的第二位表示。 在元组的第几个,可以用这个整数的后3位来表示的话,就是250x7=1。 将对应的位置设为1。 可以将整数1左移相应的位数,然后与二进制数组进行交互。 (详细实现见代码)
)2)判断整数是否在二进制数组的is_in_bitarray(char*,int )中
找到二进制数组中整数的位置后,判断位是否为1。 如果为1,则整数位于二进制数组中,相反不在数组中。
(3)从二进制数组中删除整数clear_bitarray(char*,int )
想法相同,只要找到二进制数组中整数的位置后,再将该位置设为0即可。 )如何确定位置通过方法(1),具体实现请参考代码。
/* * * * * * * * * * * * * * * * * *
* author: yym from XMU。
* function : usingbitwiselogicaloperations
*(suchasand,or and shift ) to implement bit vectors
* * * * * * * * * * * * * * * * *
# include # include # include # define shift 3
#定义掩码0x 7
char*init_bitarray(int );
voidadd_to_bitarray(char*,int );
intis_in_bitarray(char*,int );
voidclear_bitarray(char*,int );
语音测试(char *;
int main () )。
char *arr;
ARR=init_bitarray(100;
add_to_bitarray(arr,90 );
测试(arr );
clear_bitarray(ARR,90 );
测试(arr );
返回0;
}
char*init_bitarray(intsize ) )
char *tmp;
TMP=(char* ) malloc ) size/81 );
memset(tmp,0,) size/8 1); //initial to 0
返回时间;
}
void add _ to _ bitarray (char * bitarr,int num ) )
bitarr [ num shift ]|=(1(num掩码);
}
(intis_in_Bitarray(char*Bitarr,int num ) ) ) ) ) ) ) )。
returnbitarr[numshift](1) nummask );
}
voidclear_bitarray(char*bitarr,int num ) )
Bitarr[numshift]=~~(1(nummask );
}
voidtest(char*bitarr ) {
if(is_in_bitarray(bitarr,30 )!=0)
printf(30in(n );
else
printf(30notin(n );
if(is_in_bitarray(bitarr,90 )!=0)
printf(90in(n );
else
printf(90notin(n );
}