簡體   English   中英

如何長時間操作位?

[英]How to manipulate the bits in a long?

我想將long轉換為二進制代碼,然后更改一些位並再次獲得long。 我發現這篇文章對二進制很長,但是我仍然無法實現我想要的。

我認為有兩種方法可以實現我的目標:

  1. 從長久到痛苦再到長久
  2. 從long到二進制String,然后到int數組,再到long
 public static long changeHalf(long x){
        int[] firstHalf = new int[32];
        int[] secondHalf = new int[32];
        int[] result = new int[64];


        String binaryOfLong = Long.toBinaryString(x);
        for (int i = 0; i < firstHalf.length; i++) {

        }

        for (int i = 0; i < secondHalf.length; i++) {
            result[i] = secondHalf[i];
        }
        for (int i = 0; i < firstHalf.length; i++) {
            result[i+32] = firstHalf[i];
        }

        String s = Arrays.toString(result);
        return Long.parseLong(s);
    }

與其將long轉換為int數組,不如使用按位運算。

我想用后32位交換前32位

那將是:

long result = ((x & 0xFFFFFFFF00000000l) >> 32) | ((x & 0x00000000FFFFFFFFl) << 32);

這將掩蓋前32位,將其向右移動,掩蓋后32位,將其向左移動,並將結果與| (要么)。

現場示例

class Example
{
    public static void main (String[] args) throws java.lang.Exception
    {
        long x = 0x1000000020000000l;
        long result = ((x & 0xFFFFFFFF00000000l) >> 32) | ((x & 0x00000000FFFFFFFFl) << 32);
        System.out.printf("0x%016X\n", x);
        System.out.printf("0x%016X\n", result);
    }
}

輸出:

0x1000000020000000
0x2000000010000000

按位和移位運算符”教程中的更多內容

暫無
暫無

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

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