簡體   English   中英

在Java中將位移位到第64位

[英]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.

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