簡體   English   中英

Java使用移位將long的位分為兩部分

[英]Java split the bits of a long in two parts using bit shifting

在這種情況下,我需要將數字的位數9( 1001 )分成兩個相等大小的部分1001

我的第一個想法是只是移動它,但對於正確的數字我沒有得到預期的結果,我懷疑這是由於符號(在java :()中沒有未簽名的原因)。

我當前的代碼如下:

long num=9;
System.out.println(Long.toBinaryString(num));
long num1=num>>2;
System.out.println(Long.toBinaryString(num1));
long num2=num<<2;
System.out.println(Long.toBinaryString(num2));

輸出:

1001
10
100100

任何解決方法?

要獲得較低的部分,您需要使用按位AND ...,因此,如果向右移位2位以獲取較高的部分,則需要將二進制數為11(兩位為1)進行AND以獲得較低的部分。 下面的代碼應該對任何轉變進行處理:

long num = 9;
int shift = 2

System.out.println(Long.toBinaryString(num));
long num1 = num >> shift;
System.out.println(Long.toBinaryString(num1));
long num2 = num & ( (1<<shift) - 1);
System.out.println(Long.toBinaryString(num2));

計算num2說明,對於shift 2,0b表示二進制文字,以偽代碼表示:

( (1<<shift) - 1) == ( (1<<2) - 1)  == ( 0b100 - 1) == 0b11 == two bits set

從中應該清楚它對於任何shift值如何工作。

您可以將num1移回2並從num減去它。 這將給你num2

暫無
暫無

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

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