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

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次方对应的十进制数字范围

位数n 2的n次方十进制数值 对应的数量级 特殊含义说明
0 1  
1 2  
2 4  
3 8  
4 16  
5 32  
6 64  
7 128  
8 256  
9 512  
10 1024  
11 2048  
12 4096  
13 8192  
14 16384  
15 32768  
16 65536  
17 131072 十万  
18 262144 十万  
19 524288 十万  
20 1048576 百万  
21 2097152 百万  
22 4194304 百万  
23 8388608 百万  
24 16777216 千万  
25 33554432 千万  
26 67108864 千万  
27 134217728 亿  
28 268435456 亿  
29 536870912 亿  
30 1073741824 十亿  
31 2147482648 十亿  
32 4294967296 十亿  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值