Java中int或long等整型数值如何转换为无符号整数

发布于:2021-05-15 09:58:36

Java8 为 Integer、Long包装类增加了如下方法:

static? String? toUnsignedString(int/long i):将指定int或long型整数转换为无符号整数对应的字符串。

static? String? toUnsignedString(int/long i, int radix):将指定int或long型整数转换为指定进制的无符号整数对应的字符串。

static? xxx? parseUnsignedXxx(String s):将指定字符串解析为无符号整数。当调用类为Integer时,xxx 代表 int。

static? xxx? parseUnsignedXxx(String s, int radix):将指定字符串按指定进*馕鑫薹耪5饔美辔狪nteger时则xxx代表int

static int compareUnsigned(xxx x, xxx y):将x,y两个整数转换为无符号整数后比较大小。调用类为Integer时则xxx代表int。

static long divideUnsigned(long dividend, long divisor):将x、y两个整数转换为无符号整数后计算它们相除的商。

static?long remainderUnsigned(long dividend, long divisor):将x、y两个整数转换为无符号整数后计算它们相除的余数。


此外,java8还为Byte、Short增加了toUnsigneddInt(xxx x)、toUnsignedLong(yyy? x)两个方法,这两个方法用于将指定byte或short类型的变量或值转换成无符号的int 或 long 值。


?


?


java中整数数值转无符号整数应用实例:

{

//将byte类型的-3转换为无符号整数
byte b = -3;
System.out.println("byte类型的-3对应的无符号整数:" + Byte.toUnsignedInt(b)); //输出253


//指定使用16进*馕鑫薹耪
int val = Integer.parseUnsignedInt("ab",16);
System.out.println(val); //输出171


//将-12转换为无符号int型,然后转换为16进制的字符串
System.out.println(Integer.toUnsignedString(-12,16)); //输出 fffffff4


//将两个数转换为无符号整数后相除
System.out.println(Integer.divideUnsigned(-2,3));


//将两个数转换为无符号整数相除后求余
System.out.println(Integer.remainderUnsigned(-2,7));

?


?


byte值-3转换为无符号整数为何是256

? ? ? ? 无符号整数最大的特点是最高位不再被当成符号位。


? ? ? ? 在计算机里,数字都是用二进制方式以补码形式进行存储的。以byte类型的 -3 为例,byte整数占内存为一个字节,也就是八位,即八位二进制数。


? ? ? ? 可得 -3 的原码为 10000011, 反码为 11111100(符号位不变其余取反), 补码为 11111101 (反码+1)


? ? ? ? 因为要求是转为无符号整数,所以符号位将不再是符号位而作为数值位,所以由 11111101 算得 -3 的无符号整数为 253??


?


?


什么是无符号正式
简介:

计算机中的整数分为两类:不带符号位的整数(也称为无符号整数),此类整数一定是正整数;带符号位的整数,此类整数可以表示正整数,又可以表示负整数。


无符号整数常用于表示地址、索引等正整数,它们可以是8位、16位、32位、64位甚至更多。8个二进制表示的正整数其取值范围是0~255(?-1),16位二进制位表示的正整数其取值范围是0~65535(?-1),32位二进制位表示的正整数其取值范围是0~??-1。


?
有符号和无符号的差别:

int是有符号的,unsigned是无符号的。


它们所占的字节数其实是一样的,但是有符号的需要安排一个位置来表达我这个数值的符号,因此说它能表示的绝对值就要比无符号的少一半。举个例子,我们有一个1个?[1]??字节的整数(虽然这种类型不存在),那么无符号的就是这样:00000000~11111111 这个就是无符号的范围。


一个字节是8位, 有符号的数,因为第一个位要用来表示符号,那么就只剩下7个位置可以用来表示数了0000000~1111111因为有符号,所以还可以表示范围:-1111 111 ~ +1111 111。


?


?


?


?


?

相关推荐

最新更新

猜你喜欢