java中无符号long的等价物是什么

java中无符号long的等价物是什么,java,c,Java,C,我为我的项目编写了以下三个函数: 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,a

我为我的项目编写了以下三个函数:

 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 x)
{
//字-4字节-32位
//给定输入-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
//所需的输出-a0、b0、a1、b1、a2、b2、a3、b3、a4、b4、a5、b5、a6、b6、a7、b8、a9、b9、a10、b10、a11、b11、a12、a13、a14、b14、a15、b15
x=(x&0X0000FF00)>8)和0X0000FF00 | x&0XFF0000FF;
x=(x&0X00F000F0)>4)和0X00F000F0 | x&0XF00FF00F;
x=(x&0x0c)>2)和0x0c0c | x&0xc3c3;
x=(x&0x2222222)>1)和0x2222222 | x&0x9999999;
返回x;
}
单词t_函数(单词n)
{
单词t_结果=0;
WORD64 var=2*((n*n)&0xFFFFFFFF)+n;/(n*n mod FFFFFFFF)变为32位字
t_结果=(WORD)((var)和0xFFFFFFFF);
返回t_结果;
}
字lfsr(字t_结果)
{
单词returnValue=t_结果;
字标志=0;
flag=returnValue&0x8000000;//检查MSB是1还是0
//左移输入
returnValue=returnValue(0)
{
returnValue=returnValue^0x4C11DB7;
}
返回值;
}
字-无符号长


此代码是用“c”表示的。现在我必须用java实现这一点。编译和运行代码时一切正常。但这里我使用了unsignedlong,在java中我使用int,因为我一次操作32位。问题是“当在java中实现时,只要结果超出int的范围,输出就会发生偏差,并且c代码的输出将不同。我的问题有什么解决方案可以替换java中的无符号长范围值吗。如果您需要比long更大的数据类型,请尝试。

简短的回答,java中没有未签名的数据类型。C中的long在32位系统上是32位的,但java的long是64位的,所以可以用它来替换(至少可以解决溢出问题)。如果您需要更宽的整数,请使用BigInteger类。

Update–Java 8可以将有符号的
int
&
long
视为无符号 在Java中,基本整数数据类型(
byte
short
int
long
)是(正或负)

从Java8开始,
int
long
都可以被显式地视为未签名。现在正式成为一个功能,但还是有点像黑客。有些人可能会发现它在某些有限的情况下很有用。看

int:默认情况下,int数据类型是一个32位有符号二补整数,最小值为-2,最大值为2。在JavaSE8及更高版本中,可以使用int数据类型表示无符号32位整数,其最小值为0,最大值为2-1。使用Integer类将int数据类型用作无符号整数。有关更多信息,请参阅数字类一节。已将诸如compareUnsigned、divideUnsigned等静态方法添加到,以支持无符号整数的算术运算

long:long数据类型是64位2的补码整数。带符号的long的最小值为-2⁶³,最大值为2⁶³-1. 在JavaSE8及更高版本中,可以使用long数据类型来表示无符号的64位long,其最小值为0,最大值为2⁶⁴-1.无符号long的最小值为0,最大值为2⁶⁴-1.当需要的值范围大于int提供的值范围时,请使用此数据类型。还包含compareUnsigned、DividUnsigned等方法,以支持无符号长字符串的算术运算


我不一定推荐这种方法。我只是让您知道这个选项。

它在哪里“超出范围”?来自lfsr函数的结果超出了INT的范围。为什么当它给出与另一个答案相同的信息时,会被否决?