gpt4 book ai didi

java - 为什么我不能将signed int 转换为unsigned long

转载 作者:行者123 更新时间:2023-11-30 03:15:48 44 4
gpt4 key购买 nike

我正在从 Java 文件中读取数字数据:

一个字节长度的数据代表一个无符号字节两个字节长度的数据表示一个无符号短四个字节长度的数据表示一个unsigned int

但是因为 Java 7 没有无符号类型,所以我需要使用 short/integer 来表示整个字节值范围,一个 integer 来表示一个短值,我假设一个 long 来表示一个整数值。

但是我在表示整数值时遇到问题

我有这三种方法:

 public class Utils 
{
public static int u(short n)
{
return n & 0xffff;
}


public static int u(byte n)
{
return n & 0xff;
}

public static long u(int n)
{
return n & 0xffffffff;
}
}

和三个测试用例,但只有前两个测试用例有效:

public void testByteToUnsignedIntConversion()
{
byte maxByte = (byte)0xff;
int maxNotConverted = maxByte;
int maxConverted = Utils.u(maxByte);
System.out.println(maxConverted + ":" + maxNotConverted);
assertEquals(255,maxConverted);
}

public void testShortToUnsignedIntConversion()
{
short maxShort = (short)0xffff;
int maxNotConverted = maxShort;
int maxConverted = Utils.u(maxShort);
System.out.println(maxConverted + ":" + maxNotConverted);
assertEquals(65535,maxConverted);
}

public void testIntToUnsignedLongConversion()
{
int maxInt = 0xffffffff;
long maxNotConverted = maxInt;
long maxConverted = Utils.u(maxInt);
System.out.println(maxConverted + ":" + maxNotConverted);
assertEquals(4294967296l,maxConverted);
}

我误解了什么?

最佳答案

Guava 没有自己动手,而是为无符号值提供了辅助方法 - UnsignedInts , UnsignedLongs等(有关更多信息,请参阅 their wiki ),并且 Java 8 中也有内置方法可供使用 - parseUnsignedInt , divideUnsigned等等

关于java - 为什么我不能将signed int 转换为unsigned long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32653701/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com