關於位運算一點記錄 java

2021-08-29 00:05:52 字數 600 閱讀 6951

最近在看bitset原始碼,是乙個求乙個演算法題

在乙個元素為 1 到 100 的整數陣列中,如何搜尋缺失元素

在其中的一種解法裡推薦使用bitset,利用long型別中的每一位代表一種狀態,標識這個位的數字是否存在。

在看到原始碼

public void set(int bitindex)
當bitindex大於63之後數得到的資料將不再是2的次方,而是得到乙個比較小的數字,發現位運算大於資料型別的位數之後將會出現擷取的情況。

例如1<<5,運算過程首先把1轉變為2進製得到

0000 0000 0000 0000 0000 0000 0000 0001 然後左移5位後,低位補0:

0000 0000 0000 0000 0000 0000 0001 0000 換算成10進製為16

這是因為int佔4個位元組共4*8bit=32bit

但是當左移位數超過32位時,比如1<<33將得到2

原因就是int高位是符號位,超過int的位後,編譯器將自動截除後31位,所以得到的結果就是去除31位後的結果

這種處理方式同樣適用於長整型long

關於JAVA 位運算「 」

表示右移一位,相當於原來的數除以2 無符號右移運算子 它的通用格式如下所示 value num num 指定要移位值value 移動的位數 無符號右移的規則只記住一點 忽略了符號位擴充套件,0補最高位 無符號右移運算子 只是對32 位和64位 的值有意義 也表示右移,但是這個可以自由定義它的移動位數...

關於位址運算的一點領悟

資料結構課上,老師講到如何得到乙個指標的位址的時候,說到了l i sizeof elemtype 和l i,課上老師說改用前者。我回到宿舍用vs2013實驗了一下,如下 includeusing namespace std void main int p m cout m 1 m 1 endl co...

關於記憶體超頻的一點記錄

一般來說,你買到的支援多少頻率的記憶體,應該是妥妥能發揮它的基準頻率的。但由於往往廠商比較設定的比較保守。所以我們一般可以在bios中小超這些記憶體的頻率。但是也根據情況而定。例子1 光威2133mhz 頻率在z270 主機板 上可以設定到2400mhz 的頻率。然後我們可以順利進入系統。核心顯示卡...