位圖數據結構原理分析總結


位圖數據結構原理分析總結

看編程珠璣(第二版)第一章時,因對對位圖不明白是怎么運行的所以特地去百度了下,發現寫的不是很清楚,所以就參照着兩個對我幫助最大的鏈接做了下總結:

https://www.iteblog.com/archives/148.html

http://blog.163.com/xb_stone_yinyang/blog/static/2118160372013625112558579/

 

c語言中的for each (i in arr)對應着Java語言的for(int i : arr)

位圖數據結構:

兩個主要運算(32為數組中一個元素的位數,因元素的類型改變,位數隨之改變):

字節位置=數據/32;(采用位運算即右移5位)

位位置=數據%32;(采用位運算即跟0X1F進行與操作)

* i >> SHIFT 相當於 i / (2 ^ SHIFT)

* i << SHIFT 相當於 i (2 ^ SHIFT)

* i & MASK相當於mod操作 m mod n 運算(即Java中的 m % n)

0b111中的b(binary,表示該數是二進制),即該數表示二進制中的111,十進制的7

 

char arr[] 數組中的每個元素,占用一個字節,因每個字節八位,所以每一位又可以代表一個數字,所以當每一個位數被占用的時候即說明該數字已存在。

32位機中,char表示1個字節8位,int表示4個字節32位

char arr[] = new char[3]

arr[0]就表示第一個字節,第一個字節中的8位(即0~7)

arr[1]就表示第二個字節,第二個字節中的8位(即8~15)

arr[2]就表示第三個字節,第三個字節中的8位(即16~23)

又如 int arr[] = new int[3]

arr[0]就表示0~3個字節:

第一個字節中的8位(即0~7)、第二個字節中的8位(即8~15)、第三個字節中的8位(即16~23)、第三個字節中的8位(即24~31)

arr[1]就表示4~7個字節:

第一個字節中的8位(即32~39)、第二個字節中的8位(即40~47)、第三個字節中的8位(即48~55)、第三個字節中的8位(即56~63)

arr[2]就表示8~11個字節:

第一個字節中的8位(即64~71)、第二個字節中的8位(即72~79)、第三個字節中的8位(即80~87)、第三個字節中的8位(即88~95)

仔細理解上文中字節的位置位的位置,可以幫助你快速理解位圖機制。 

 

最后對基本類型占用的字節數和位置不是很清楚的可以參考鏈接:https://www.cnblogs.com/123hll/p/5805040.html;

注:此文主要闡述了存放數據的原理,並不涉及任何運算。因本人也是初涉,如有錯誤或遺漏,還請大神不吝補充指教。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM