首页 > 其他 > 详细

位运算

时间:2021-05-13 19:58:28      阅读:16      评论:0      收藏:0      [点我收藏+]
位运算符
  0?0 0?1 1?1 规则
& 0 0 1 都为1时才为1
| 0 1 1 一个为1即为1
^ 0 1 0 同时为0,不同为1

 

~      按位取反

<<    左移运算符,num<<1 == num*2

>>    右移运算符,num>>1 == num/2

 

BitMap 位图

假设欲存储100以内的质数

一个int型整数占4字节,100以内有25个质数,占4*25=100字节。

用位图存储,位数代表该元素,位上的值代表是否有该元素,100以内的数,只需要100位,即100/32+1=4字节。

总结1:需要位图大小,可用 type_name bmp[ N / type_size + 1 ] 计算,其中N代表欲存储的最大值。

bmp[0] 

0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 1
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

  

bmp[1]

0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

 

bmp[2]

0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

 

bmp[3]

0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

 

 

 

总结2:给定一个数M,求其行数 M / type_size,求其列数 M % type_size

a0 = 0

插入:放入质数2,2/32=0,2%32=2,即应放入第0行第2列。 a1 = a0 +2/32 | (1<<2)  = 0000 0000 0000 0000 0000 0000 0000 0100

          放入质数3,3/32=0,3%32=3,即应放入第0行第3列。 a2 = a+ 3/32 | (1<<3)  = 0000 0000 0000 0000 0000 0000 0000 1100 

总结3:插入公式: a= an-1 + (i / type_size) | (1<< (i%type_size))

删除:删除37,   ~ (1 << (37%32) ) 该位置0,其他位置1。 bmp[37/32] &  ~ (1 << (37%32) ) 。

总结3:删除公式: bmp[ i / type_size ] = bmp[ i / type_size ] & ~ (1<< (i%type_size))

查找:查找73存不存在,bmp[73/32] & (1<<73%32) == 1 ? true : false ;

总结4:查找公式:bmp[ i / type_size ] &  (1<< (i%type_size)) == 1 ? true : false 

位运算

原文:https://www.cnblogs.com/tomatokely/p/14764719.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!