我是靠谱客的博主 等待小蝴蝶,最近开发中收集的这篇文章主要介绍不用运算符比较两个int数的大小,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

其实出现问题的情况,只存在于异号两数想减使得结果超过了int型的最大或最小值,因此导致了符号位丢失。所以在这个基础上想到了转型。就是把int型转成long型的,那么符号位就保存在了第64位上了,同时也不会丢失符号位。贴代码(借鉴了一个网友的方法,用数组来存结果,这样就不用==比较符了。这个方法在Core Java中经常用到。):

view plainprint?

  1. public class Bigger {  
  1.     public static void main(String args[]){  
  1.         int a = -2147483648;  
  1.         int b = 2147483647;  
  1.           
  1.         String[] strArray = {"a>=b""a<b"};  
  1.                   
  1.         int i = (int)((long)a-(long)b >>> 63);  
  2.           
  1.         System.out.println(strArray[i]);  
  1.     }  
  2. }  

当然了,思考都是有过程的。开始时,最先想到的是两数想减,看符号位。我想大家也都会想到这一点:

view plainprint?

  1. System.out.println(((a-b)>>>31==0)?"a>=b":"a<b");  

用了==先不说,一般情况下都能得出正确的结果;但是先上面代码那样aint型的最小值,而bint型的最大值的话,就会有越界。因此,在这个代码的基础上,增加限制(符号相同,就减,这样安全,没有问题;符号相反的话,如果a是正的,直接得出结果。):

view plainprint?

  1. System.out.println((((a >>> 31 == 0) && (b >>> 31 == 1))|(((a >>> 31)^(b >>> 31))==0)&&(((a-b)>>>31)==0))?"a>=b":"a<b");  

当然了,怎么看还是第一段代码简洁。思考无极限,是不是还有别的解法呢?

最后

以上就是等待小蝴蝶为你收集整理的不用运算符比较两个int数的大小的全部内容,希望文章能够帮你解决不用运算符比较两个int数的大小所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部