首页 > 编程知识 正文

c语言二维数组元素求和,c语言计算整数的位数

时间:2023-05-05 14:37:06 阅读:14312 作者:452

本文主要论述了用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 );

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。