簡體   English   中英

java 中無符號長的等價物是什么

[英]What is the equivalent of unsigned long in java

我已經為我的項目編寫了以下三個函數:

 WORD shuffling(WORD x)
{

// WORD - 4 bytes - 32 bits

//given input - a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15- b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15

//output required - a0,b0,a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6,a7,b7 - a8,b8,a9,b9,a10,b10,a11,b11,a12,b12,a13,b13,a14,b14,a15,b15

    x = (x & 0X0000FF00) << 8 | (x >> 8) & 0X0000FF00 | x & 0XFF0000FF;
    x = (x & 0X00F000F0) << 4 | (x >> 4) & 0X00F000F0 | x & 0XF00FF00F;
    x = (x & 0X0C0C0C0C) << 2 | (x >> 2) & 0X0C0C0C0C | x & 0XC3C3C3C3;
    x = (x & 0X22222222) << 1 | (x >> 1) & 0X22222222 | x & 0X99999999;
    return x;
}

WORD t_function(WORD n)
{

    WORD t_result=0;
    WORD64 var = 2*((n*n)& 0xFFFFFFFF)+n;   // (n*n mod FFFFFFFF) becomes a 32-bit word
    t_result = (WORD) ((var)& 0xFFFFFFFF);
    return t_result;
}

WORD lfsr(WORD t_result)
{

    WORD returnValue = t_result;
    WORD flag = 0;
    flag = returnValue & 0x80000000; // Checking if MSB is 1 or 0

    // Left shift the input
    returnValue = returnValue << 1;

    // If MSB is 1 then XOR the reult with the primitive polynomial
    if(flag > 0)
    {
        returnValue = returnValue ^ 0x4C11DB7;
    }
    return returnValue;
}

WORD - 無符號長

此代碼在“c”中。 現在我必須在 java 中實現這個。 編譯和運行代碼一切正常。 但是在這里我使用了 unsigned long 並且在 java 中我使用了 int 因為我一次在 32 位上運行。 The problem is "when implementing in java whenever the result is going out of range of int the output is being deviated and it will not be the same output from the c code. Is there any solution for my problem to replace the unsigned long range values在 java

更新 - Java 8 可以將已簽名的intlong視為無符號

在 Java 中,原語 integer 數據類型( byteshortintlong )是有符號的(正數或負數)。

從 Java 8 開始, intlong都可以明確地視為無符號。 現在正式成為一項功能,但仍然是一種黑客行為。 有些人可能會發現它在某些有限的情況下很有用。 請參閱Java 教程

int :默認情況下,int 數據類型為 32 位有符號二進制補碼 integer,最小值為 -2³¹,最大值為 2³¹-1。 在 Java SE 8 及更高版本中,您可以使用 int 數據類型來表示無符號的 32 位 integer,其最小值為 0,最大值為 2³²-1。 使用 Integer class 將 int 數據類型用作無符號 integer。 有關更多信息,請參閱數字類部分。 Static 方法(如 compareUnsigned、divideUnsigned 等)已添加到Integer class以支持無符號整數的算術運算。

long :long 數據類型是 64 位二進制補碼 integer。 有符號長整數的最小值為 -2⁶³,最大值為 2⁶³-1。 在 Java SE 8 及更高版本中,您可以使用 long 數據類型來表示無符號的 64 位 long,其最小值為 0,最大值為 2⁶⁴-1。 unsigned long 的最小值為 0,最大值為 2⁶⁴-1。 當您需要比 int 提供的值范圍更廣的值時,請使用此數據類型。 Long class還包含 compareUnsigned、divideUnsigned 等方法,以支持 unsigned long 的算術運算。

不一定推薦這種方法。 我只是讓你意識到這個選項。

簡短的回答,java 中沒有無符號數據類型。 C 中的 long 在 32 位系統上是 32 位的,但 java 的 long 是 64 位的,因此您可以使用它進行替換(至少它可以解決溢出問題)。 如果您需要更寬的整數,請使用 BigInteger class。

查看 Java 的原始數據類型 如果您需要比 long 更大的東西,請嘗試使用BigInteger

暫無
暫無

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

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