簡體   English   中英

在Java中將int轉換為十六進制

[英]Convert an int to hex in Java

我需要確定int n是否為2的冪,並且我的方法是將n轉換為十六進制數並檢查每個位(0或1)。 但是,我從未在Java中使用過十六進制數字,有人可以在這里幫助我嗎?

轉換為String以及使用正則表達式進行替換都非常昂貴。

檢查(正)2的冪的簡單方法是檢查設置的位數。

if (x > 0 && Long.bitCount(x) == 1)

雖然Long.bitCount看起來很復雜,但JVM可以用一條機器代碼指令替換它。

測試2的冪的規范方法(在谷歌搜索如何測試2的冪時會遇到很多,並且可能在代碼中會遇到)

x != 0 && (x & x - 1) == 0

經常遇到帶有更多括號的情況(優先偏執狂?)

x != 0 && (x & (x - 1)) == 0

通常會跳過x != 0檢查並確保零不能輸入,或者(通常)零在某種意義上“等於” 2的冪。

當然,您可以更改條件x > 0 ,如果你不想考慮-2147483648二的冪,盡管在許多情況下,這將是(因為它是全等到2 31模2 32,這樣解釋的簽名是一個鍋,而且總的來說只有一點點設置,所以一直都是PoT)


那么x & x - 1有什么用呢? 它取消設置最低位,但讓我們在PoT的背景下進行查看。

讓我們忽略x <2並說x的形式為a10 k (即,任意位串后跟一個1,后跟k個零),從中減去1得到a01 k,因為-1借用了所有尾隨的零直到達到最低的置位,不置位,然后借位死,高位不變。

如果對a10 k和a01 k進行按位AND,則得到a00 k,因為與自身進行與運算的對象本身又是自身( a ),並且在AND的尾部始終有一個0,因此全為零。

現在有兩種情況。 0)a = 0。 然后結果為零,我們知道我們以10 k形式的x開始,它是2的冪。 並且1)a!= 0,則結​​果也不為零,這是因為a仍然出現a x,並且x不是2的冪,因為x至少具有兩個設置位(我們明確查看的最低設置位) ,和至少一個在其他某處a )。

那么實際上還有另外兩種情況,x = 0和x = 1被忽略了。 如果我們允許k為零,則x = 1也包括在內。 但是x = 0很煩人,在x & x - 1中, x&的左操作數,因此無論右操作數發生什么,結果都必須為零。 因此,它屬於特殊情況。

沒有理由轉換為十六進制來檢查位。 實際上,這實際上使它變得更加困難。 以下行為int變量“ num”生成二進制字符串:

String binary = Integer.toString(num, 2)

該字符串將只有1和0。 然后消除任何0:

String ones = binary.replace("0", "");

如果String的長度大於1,則存在一個以上的位,這表示它不是2的冪。如果長度為0,則表示該數字沒有位,即為0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM