[英]Bitshift to 64'th Bit in Java
對於編程,我需要將位從第一位移到最后一位。 所以我需要:
long a = 0;
a |= 1L<<64;
由於long
不是unsigned
,所以它不起作用。 是否可以將1移到最后一位? 我花了long
而不是BigInt
,因為我試圖使用盡可能少的內存。
Java僅將num % sizeof(datatype)
移位,即,如果將int
移位32
,則實際上根本不會移位。 如果您移位33,則有效移位將為33 % 32 = 1
。
這同樣適用於真long
只是的尺寸long
為64,因此由64移位有效地沒有偏移。 最高的轉換可能與long
因而是63,這就是你所需要得到的最后一位到第64位(它已經在位置1處,所以你只需要63米的地方轉移)。
移位64位將具有不移位的效果。 移位63位將具有所需的輸出。 long
v << b上的移位移位b%64位。 因此1L << 64不會發生任何變化。
public static void main (String[] args) throws java.lang.Exception
{
long a=1L<<63;
long b=1L<<64;
System.out.println(Long.toBinaryString(a));
System.out.println(Long.toBinaryString(b));
}
預期產量:
1000000000000000000000000000000000000000000000000000000000000000
1
首先,您的代碼沒有多大意義。 如果將long
變量向左移動64位,則應該以0結尾,因為您已經移走了long
的所有原始位。
其次,因為你已經正確地提到,Java的對待所有int
S和long
S作為燒焦(如說在這里 )。 因此,它認為long
上的64位移位等於0移位。 這就是為什么沒有得到零,而是留下原始值1的原因。如果要將a
初始化為1
然后再初始化63個零,我建議避免移位,而只需使用以下方法:
long a = 0x8000_0000_0000_0000L;
理解二進制的任何人都可以讀取它,並且不涉及Java移位魔術。
如果要繼續使用班次,請改用6 3班次:
long a|=1L<<63;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.