八位图 16位图_了解位图
八位圖 16位圖
幾周前,我和Alistair正在研究用于對節點附加到Neo4j數據庫中的標簽進行建模的代碼。
這種工作方式是將32個節點ID的塊表示為每個標簽的32位位圖 ,其中1表示1表示節點具有標簽,0表示沒有標簽。
例如,假設我們有節點ID 0-31,其中0是最高位,而31是最低位。 如果只有節點0具有標簽,則將其表示為以下值:
如果我們想象32位彼此相鄰放置,它將看起來像這樣 :
java> 0X80000000; Integer res16 = -2147483648
我們要做的下一件事是確定節點是否應用了標簽。 我們可以通過使用按位AND來實現。
例如,要檢查是否設置了最高位,我們將編寫以下代碼:
java> bitmap & (1 << 31); Integer res10 = -2147483648正如我們所想象的那樣。 現在讓我們檢查一下一些我們尚未設置的位:
java> bitmap & (1 << 0); Integer res11 = 0java> bitmap & (1 << 1); Integer res12 = 0java> bitmap & (1 << 30); Integer res13 = 0我們可能要執行的另一項操作是在現有位圖上設置另一位,我們可以對其使用按位“或”運算。
按位“或”表示如果一個值設置了該位或兩個值都設置了,則將置位。
讓我們設置第二高的位。 并可視化該計算:
如果我們評估,我們期望設置兩個最高位:
java> bitmap |= (1 << 30); Integer res14 = -1073741824現在,如果我們可視化位圖,我們將看到確實如此:
java> 0XC0000000; Integer res15 = -1073741824
我們要做的下一個操作是取消設置已經設置好的位,可以使用按位異或。
異或表示只有在計算中包含(0和1)或(1和0)的組合時,該位才會保持設置狀態。 如果有兩個1或2 0,那么它將被取消設置。
讓我們取消設置第二高的位,以便僅設置最高位。
如果我們形象化地進行以下計算:
并且如果我們評估返回到原始位圖:
java> bitmap ^= (1 << 30); Integer res2 = -2147483648我使用Java REPL評估了本文中的代碼示例,并且本文非常清楚地解釋了移位運算符 。
這篇文章中描述的Neo4j版本的位圖位于github上的BitmapFormat類中。
翻譯自: https://www.javacodegeeks.com/2014/01/learning-about-bitmaps.html
八位圖 16位圖
總結
以上是生活随笔為你收集整理的八位图 16位图_了解位图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 死骑邪恶天赋加点(邪恶死亡骑士堆什么属性
- 下一篇: .net2.0 orm_Hibernat