[英]Java split the bits of a long in two parts using bit shifting
在這種情況下,我需要將數字的位數9( 1001
)分成兩個相等大小的部分10
和01
。
我的第一個想法是只是移動它,但對於正確的數字我沒有得到預期的結果,我懷疑這是由於符號(在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.