位运算——用位存储40亿个40亿以内的整数

来源:互联网 发布:手机淘宝有什么活动 编辑:程序博客网 时间:2024/05/22 19:27

http://www.cnblogs.com/steven_oyj/archive/2010/05/23/1741975.html

腾讯面试题:位运算——用位存储40亿个40亿以内的整数

一、题目


位运算——用位存储40亿个40亿以内的整数

   1: #include <iostream>  
   2: using namespace std;  
   3:   
   4: typedef unsigned int Bit32;  // 能表示42亿+的无符号整数  
   5:  
   6: const Bit32 maxLen=125000001; //数组长度,0-40亿  
   7: const Bit32 thirtytwo=32;  
   8:    
   9: void createArray(Bit32 *&arr)  
  10: {  
  11:    arr=new Bit32[maxLen];  
  12:    memset(arr,(Bit32)0,sizeof(arr));  
  13: }  
  14:  
  15: bool setBit(Bit32 *arr,Bit32 num)  
  16: {  
  17:   if(((arr[num/thirtytwo])&(1<<(thirtytwo-num%thirtytwo-1)))==0)  
  18:   {  
  19:      arr[num/thirtytwo]|=1<<(thirtytwo-num%thirtytwo-1);  
  20:      return true;  
  21:   }  
  22:   else  
  23:   {  
  24:      return false;  
  25:    }  
  26: }  
  27:   
  28: int main()  
  29: {  
  30:    Bit32 *s;  
  31:    createArray(s);  
  32:    if(!setBit(s,5))  
  33:    {  
  34:        cout<<"标记失败"<<endl;  
  35:    }  
  36:    if(!setBit(s,64))  
  37:    {  
  38:        cout<<"标记失败"<<endl;  
  39:    }  
  40:    if(!setBit(s,1))  
  41:    {  
  42:        cout<<"标记失败"<<endl;  
  43:    }  
  44:  
  45:    return 0;  
  46: } 

二、位运算总结复习

1、2的n次方对应的十进制数字范围

位数n2的n次方十进制数值对应的数量级特殊含义说明01个 12个 24个 38个 416十 532十 664十 7128百 8256百 9512百 101024千 112048千 124096千 138192千 1416384万 1532768万 1665536万 17131072十万 18262144十万 19524288十万 201048576百万 212097152百万 224194304百万 238388608百万 2416777216千万 2533554432千万 2667108864千万 27134217728亿 28268435456亿 29536870912亿 301073741824十亿 312147482648十亿 324294967296十亿 


0 0
原创粉丝点击