Java Integer类的compareUnsigned()方法详解

本文详细介绍了Java Integer类的compareUnsigned()方法,用于无符号整数比较。该方法在处理负数时,会先将其转换为无符号整数,然后进行大小比较。文章通过三种情况的案例分析,解释了方法的工作原理,并提供了比较技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java Integer类的compareUnsigned()方法

一.概念

compareUnsigned()方法:

  • 用于将两个整形参数转化为无符号整形后比较大小,
  • 当两个参数的值相等时,返回0
    当前一个参数的值小于后一个参数的值时,返回 -1
    当前一个参数的值大于后一个参数的值时,返回1

JDK API文档如下:
在这里插入图片描述二.例题说明

1.第一种情况:两个参数都为正数时。

  • 案例
 - 		int a = 10;
		int b = 20;
		System.out.println("a与b比较之后的返回值为:" + Integer.compareUnsigned(a, b));
		int c = 200;
		int d = 100;
		System.out.println("c与d比较之后的返回值为:" + Integer.compareUnsigned(c, d));
  • 输出结果为:

a与b比较之后的返回值为:-1
c与d比较之后的返回值为:1

2.第二种情况:其中某一个参数为负数时。

  • 案例
 - 		int x = 50;
		int y = -10;
		System.out.println("x与y比较之后的返回值为:" + Integer.compareUnsigned(x, y));
  • 输出结果为:

x与y比较之后的返回值为:-1

解释:由于y=-10,参数中存在负数;则首先把y的值-10转换为无符号整数,则y的值变为4294967286,此时50<4294967286,即x<y,因此比较之后返回-1。

拓展:怎么转化为无符号整数的呢??
在计算机里,我们知道,数字都是用二进制方式以补码形式进行存储的,而无符号整数最大的特点就是最高位不再当作符号位。那么此处为int类型的-10的补码是多少呢?由于int类型的整数占4个字节的内存,也就是32位,即32位二进制数。

可得 -10 的
原码为 10000000 00000000 0000000 00001010 //最左边的1为符号位,1表负数,0表正数
反码为 11111111 11111111 11111111 11110101 //在原码的基础上,符号位不变,其它位取反
补码为 11111111 11111111 11111111 11110110 //负整数的补码为反码加一,正整数的补码就是原码本身
故此:将求得的补码转为十进制,即2^32 -1-(2^0 +2^3)=4,294,967,286
另:可用Integer类的toUnsignedString()方法,转为一个无符号数的字符串,即Integer.toUnsignedString(-10)进行测试输出来验证结果

  • 技巧:其中一个参数为负数时,比较大小小技巧:先把两个参数按正常比较方法来比较大小,然后把正常结果取反即为最终的结果值。 也就是说参数为负数的一方永远比参数为正数的一方要大。
    比如此处的x和y,很明显50>-10,本来应该输出的是1,然后我们把它取反,为-1。最终的结果则为取反后的值-1。

······ 可用该技巧的原因:

    int intMinValue = Integer.MIN_VALUE;// int类型的最小值
	int intMaxValue = Integer.MAX_VALUE;// int类型的最大值
	System.out.println("int类型的最小值为" + intMinValue + "转无符号后为" + Integer.toUnsignedString(intMinValue));
	System.out.println("int类型的最大值为" + intMaxValue + "转无符号后为" + Integer.toUnsignedString(intMaxValue));
	输出结果为 :
	int类型的最小值为-2147483648转无符号后为2147483648
	int类型的最大值为2147483647转无符号后为2147483647

》》由此可知:2147483648>2147483647,即int类型的最小值(最小负数)转无符号整数后仍然比int类型的最大值大。在int类型取值范围内,负数转无符号后其参数永远比正数的参数都要大。

3.第三种情况:两个参数都为负数时。

  • 案例
 - 		int a = -10;
		int b = -20;
		System.out.println("a与b比较之后的返回值为:" + Integer.compareUnsigned(a, b));
		int c = -200;
		int d = -100;
		System.out.println("c与d比较之后的返回值为:" + Integer.compareUnsigned(c, d));
  • 输出结果为:

a与b比较之后的返回值为:1
c与d比较之后的返回值为:-1

解释:
由于两个参数都为负数,则需要把他们两个参数都转换为无符号整数后再来比较大小。
我们知道,负数值越大其转化为无符号值也越大,负数值越小其转化为无符号值也越小,此处的-10大于-20,所以返回输出1,-200小于-100,所以返回输出-1,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值