日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

了解位图

發布時間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 了解位图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

幾周前,我和Alistair一起研究了用于對Neo4j數據庫中節點已附加到其上的標簽進行建模的代碼。

這種工作方式是將32個節點ID的塊表示為每個標簽的32位位圖 ,其中位1表示節點具有標簽,而0表示沒有標簽。

例如,假設我們有節點ID 0-31,其中0是最高位,而31是最低位。 如果只有節點0具有標簽,則將其表示為以下值:

java> int bitmap = 1 << 31; int bitmap = -2147483648

如果我們想象32位彼此相鄰放置,它將看起來像這樣 :

java> 0X80000000; Integer res16 = -2147483648

我們要做的下一件事是確定節點是否應用了標簽。 我們可以通過按位與來實現。

例如,要檢查是否設置了最高位,我們將編寫以下代碼:

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類中。

參考:在Mark Needham博客博客中,從我們的JCG合作伙伴 Mark Needham 了解位圖 。

翻譯自: https://www.javacodegeeks.com/2014/01/learning-about-bitmaps.html

總結

以上是生活随笔為你收集整理的了解位图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。