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):将指定字符串按指定进制解析为无符号整数。调用类为Integer时则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。