我已经为我的项目编写了以下三个函数:
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 - unsigned long
此代码位于“c”中。现在我必须在java中实现它。在编译和运行代码时一切都很好。但是在这里我使用unsigned long而在java中我使用了int因为我一次只运行32位。问题是“当在java中实现结果超出int的范围时,输出被偏离并且它将不是c代码的相同输出。在我的问题中是否有任何解决方案来替换无符号长范围值在java中
答案 0 :(得分:18)
int
&amp; long
最初在Java中,原始整数数据类型(byte,short,int和long)被签名(正面或负面)。
现在我在Java Tutorial中看到,从Java SE 8开始,int
和long
都可以用作无符号。
int :默认情况下,int数据类型是32位带符号的二进制补码整数,其最小值为-2³¹,最大值为2³¹-1。在Java SE 8及更高版本中,可以使用int数据类型表示无符号的32位整数,其最小值为0,最大值为2³²-1。使用Integer类将int数据类型用作无符号整数。有关更多信息,请参阅数字类一节。已经在
Integer
class中添加了compareUnsigned,divideUnsigned等静态方法,以支持无符号整数的算术运算。long :长数据类型是64位二进制补码整数。有符号长度的最小值为-2⁶³,最大值为2⁶³-1。在Java SE 8及更高版本中,您可以使用长数据类型来表示无符号的64位长,其最小值为0,最大值为2⁶⁴-1。 unsigned long的最小值为0,最大值为2⁶⁴-1。当需要比int提供的值更宽的值时,请使用此数据类型。
Long
class还包含compareUnsigned,divideUnsigned等方法,以支持unsigned long的算术运算。
我不必然会推荐这种方法。我只是让你知道这个选项。
答案 1 :(得分:9)
简短回答,java中没有未签名的数据类型。在C语言中,C在32位系统上是32位,但是java的长度是64位,因此您可以使用它进行替换(至少它可以解决溢出问题)。如果你需要更宽的整数,请使用BigInteger类。
答案 2 :(得分:5)
查看Java的Primitive Data Types。如果您需要大于长的东西,请尝试BigInteger。