当前位置: 首页 > news >正文

大型 网站 建设 公司专业的徐州网站开发

大型 网站 建设 公司,专业的徐州网站开发,网站标题改不了,做育儿类网站用什么程序好学习交流加#xff08;可免费帮忙下载CSDN资源#xff09;#xff1a;个人微信#xff1a; liu1126137994学习交流资源分享qq群1#xff08;已满#xff09;#xff1a; 962535112学习交流资源分享qq群2#xff1a; 780902027 今天有朋友遇到一个笔试题#xff1a;一个… 学习交流加可免费帮忙下载CSDN资源个人微信 liu1126137994学习交流资源分享qq群1已满 962535112学习交流资源分享qq群2 780902027 今天有朋友遇到一个笔试题一个 4096位的bit数组要找出前10个二进制的1 所在的位置麻烦写一个函数来实现 bit数组对我来说是一个新的概念故整理资料学习bit数组的概念~ 加qq1126137994一起学习更多技术 文章目录1、位数组的概念将一个整数添加到二进制数组中 判断一个整数是否在二进制数组中删除二进制数组中的一个整数完整代码1、位数组的概念 所谓的位数组主要是为了有效地利用内存空间而设计的一种存储数据的方式。在这种结构中一个整数在内存中用一位1 bit表示。这里所谓的表示就是如果整数存在相应的二进制位就为1否则为0。 主要思想我们知道一个 char 类型的数据在内存中占用 1Byte即 8 bit如果我们用二进制位在内存中的顺序来代表整数则可以存储更多的信息。 这样的话一个 char 类型可以存储 8个整数。假设 a是一个 char 数组的话整数8就可以用 a[1] 的第一个二进制位表示了。那么512字节就是4096位第一位代表0第二位代表1第三位代表2第4096位代表4095这样我们就可以用512字节存储4096个数了大大的节省了内存空间。 这里的关键就是 一个char型能表示8个整数。 下面我实现一种利用 char 数组构造一个二进制数组。主要包括以下三个方面 将一个整数添加到二进制数组中 void add_to_bitarray(char *bitarr, int num){ /* num代表要插进数组中的数 */bitarr[num SHIFT] | (1 (num MASK)); /* MASK 为 0x7 */ }该方法的主要作用是将二进制数组中表示该整数的位置为1。首先我们得找到该整数位于 char 数组的第几个元组中这里利用该整数除以8即可代码中除以8用右移三位实现例如整数25位于25/8 3 余 1表明该整数是用char 数组的第四个元素的第二位表示。那么在该元素的第几位可以利用该整数的后三位表示0~7刚好可以表示8个位置即 25 0x7 1则代表25在该元素的第二位。将相应位置1可以先将整数1左移相应位数然后与二进制数组进行或操作即可。 判断一个整数是否在二进制数组中 int is_in_bitarray(char *bitarr, int num){return bitarr[num SHIFT] (1 (num MASK)); } 先找到该整数在二进制数组中的位置然后判断该位是否为1若是则表示该整数位于二进制数组中反之不在数组中。 删除二进制数组中的一个整数 void clear_bitarray(char *bitarr, int num){bitarr[num SHIFT] ~(1 (num MASK)); }思路相同先找到该整数在二进制数组中的位置然后将该位置为0即可。 完整代码 完整的代码如下 #include stdio.h #include stdlib.h #include string.h #define SHIFT 3 #define MASK 0x7 char *init_bitarray(int); void add_to_bitarray(char *, int); int is_in_bitarray(char *, int); void clear_bitarray(char *, int); void test(char *);int main(){char *arr;arr init_bitarray(100);add_to_bitarray(arr, 25);test(arr);clear_bitarray(arr, 25);test(arr);getchar();return 0; }char *init_bitarray(int size){char *tmp;tmp (char*)malloc(size / 8 1);memset(tmp, 0, (size / 8 1)); //initial to 0 return tmp; }void add_to_bitarray(char *bitarr, int num){ /* num代表要插进数组中的数 */bitarr[num SHIFT] | (1 (num MASK)); }int is_in_bitarray(char *bitarr, int num){return bitarr[num SHIFT] (1 (num MASK)); }void clear_bitarray(char *bitarr, int num){bitarr[num SHIFT] ~(1 (num MASK)); }void test(char *bitarr){if (is_in_bitarray(bitarr, 25) ! 0)printf(25 in\n);elseprintf(25 not in\n);if (is_in_bitarray(bitarr, 30) ! 0)printf(30 in\n);elseprintf(30 not in\n); }以上是对位数组概念的理解以及如何创建位数组 在VS中运行结果如下 下面来解决我们最开始留下的笔试题 一个 4096位的bit数组要找出前10个二进制的1 所在的位置麻烦写一个函数来实现。 假设我们这个数组存储的是char类型的512字节我们利用上面的函数来构造bit数组可以往特定的位填1然后写出函数来查找前10个1所在的位置并返回位置 #include stdio.h #include stdlib.h #include string.h #define N_bit 4096 #define SHIFT 3 #define MASK 0x7 char *init_bitarray(int); void add_to_bitarray(char *, int);char *init_bitarray(int size){char *tmp;tmp (char*)malloc(size / 8 1);memset(tmp, 0, (size / 8 1)); //initial to 0 return tmp; }void add_to_bitarray(char *bitarr, int num){ /* num代表要插进数组中的数 */bitarr[num SHIFT] | (1 (8 - (num MASK))); }void add_1_to_bitarr(char *bit_arr) {add_to_bitarray(bit_arr, 25);add_to_bitarray(bit_arr, 28);add_to_bitarray(bit_arr, 23);add_to_bitarray(bit_arr, 67);add_to_bitarray(bit_arr, 35);add_to_bitarray(bit_arr, 36);add_to_bitarray(bit_arr, 55);add_to_bitarray(bit_arr, 69);add_to_bitarray(bit_arr, 44);add_to_bitarray(bit_arr, 97);add_to_bitarray(bit_arr, 421);add_to_bitarray(bit_arr, 564);add_to_bitarray(bit_arr, 987);add_to_bitarray(bit_arr, 684);add_to_bitarray(bit_arr, 986);add_to_bitarray(bit_arr, 658);add_to_bitarray(bit_arr, 354);add_to_bitarray(bit_arr, 764);add_to_bitarray(bit_arr, 691);add_to_bitarray(bit_arr, 36);add_to_bitarray(bit_arr, 345); } int main() {char *bit_arr;bit_arr init_bitarray(4096);add_1_to_bitarr(bit_arr);int num[10];int k 1;for (int i 0; i N_bit / 8 1; i){for (int j 1; j 8 k 10; j){if ((bit_arr[i] 128) 128){num[k] i * 8 j 1;k;}bit_arr[i] 1;}}for (int n 1; n 10; n){printf(第%d个1位置为:%d位\n, n, num[n]);}//getchar();return 0; }运行结果为 我们看到前10 个1 的位置都比我们填入到数组中的位置大1是因为我们认为4096位是从第一个1开始而数组是从第0号开始所以产生了偏移 到此我们已经用了一种方法来解决这个笔试题同时也学会了一个新的概念位数组
http://www.sadfv.cn/news/266608/

相关文章:

  • 非官方网站建设给被k的网站做友链
  • 怎么能将网站做的不简单牡丹区住房和城乡建设局网站
  • 如何选择深圳网站建设3d地图网站模板html
  • 国家建设工程造价数据监测平台在哪个网站网络营销论文总结
  • 公司核名在哪个官方网站如何优化网站信息架构
  • 有口碑的盐城网站建设网页设计论文题目大全
  • 网站没被收录做网站运营经理的要求
  • 如何给网站2做推广万维网
  • 优化网站关键词排名软件展示产品的网站
  • 百度怎样收录网站应用商店wordpress
  • 做网站建设深圳中装建设
  • 吉林省城乡建设官方网站WordPress做头部的插件
  • 如何制作企业网站长沙装修公司性价比最高的是哪个
  • 外贸网站赚钱提升网站建设品质
  • 怎么制作网站详细流程wordpress 建表
  • 大兴网站建设新加坡网站后缀
  • 哪些网站可以看一级a做爰片wordpress能做出
  • 做百度网站找谁wordpress的搭建教程
  • 祥云平台网站建设怎么收费网站制作费用需要多少钱
  • 做美容美容院网站的费用忘记wordpress的账号和密码
  • 青龙县建设局网站网络推广服务
  • 网站域名的用处公司企业logo设计免费
  • 怎么弄免费的空间做网站做化妆品网站怎样
  • 邯郸网站设计在哪里深圳创业补贴政策2022
  • 创意个人网站设计网页视觉设计是什么
  • 秦皇岛网站制作专家软件外包公司
  • 深圳网站建设 设计网站文件结构
  • 网站建设算无形资产访问国外的网站很慢
  • php网站开发过程网站开发实战视频
  • dede做的网站怎样去换模版网络培训总结