一种比Math类库abs()方法性能更高的取绝对值的方法

举报
简简单单Onlinezuozuo 发表于 2022/02/18 23:18:47 2022/02/18
【摘要】 一种比Math类库abs()方法性能更高的取绝对值的方法 # Math.abs()的实现源码 通过三目运算符判断a是否小于0来实现 /** * Returns the absolute ...

一种比Math类库abs()方法性能更高的取绝对值的方法

#

Math.abs()的实现源码

通过三目运算符判断a是否小于0来实现

/**
     * Returns the absolute value of an {@code int} value.
     * If the argument is not negative, the argument is returned.
     * If the argument is negative, the negation of the argument is returned.
     *
     * <p>Note that if the argument is equal to the value of
     * {@link Integer#MIN_VALUE}, the most negative representable
     * {@code int} value, the result is that same value, which is
     * negative.
     *
     * @param   a   the argument whose absolute value is to be determined
     * @return  the absolute value of the argument.
     */
    public static int abs(int a) {
        return (a < 0) ? -a : a;
    }
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

如果换种方式,性能会有20%左右的提升

代码如下

 /**
     * Created by 谭健 2017/8/13. 12:47.
     * All Rights Reserved
     *
     * int 是 32 位数据
     * int 类型的任何正数右移31位 = 0,任何负数右移31位 = 1
     * 溢出 31 位截断,空出 31 位补1,得到-1
     * a>>31 可以得到该数的符号位 + 还是 -
     * 如果 a>>31 + ,那么 a ^ 0 = a ,如果 a>>31 - ,那么 a ^ -1 翻转 a 的二进制
     *
     * @param a int a
     * @return a 的绝对值
     */
    public static int abs(int a){
        return (a^(a>>31))-(a>>31);
    }
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

奇数偶数的判断

/**
     * 一般普遍采用 n % 2 == 0 的方式
     * 但是如果换成位运算方式,效率会比前者好很多
     *
     * 在二进制中,末位为 0 必然是偶数,否则是奇数,并且不论正负
     * 所以,是什么数,看看末位就行了
     *
     * @param a long a
     * @return 如果是奇数,返回true,否则返回false
     */
    public static boolean isOdd(long a){
        return (a & 1) == 1;
    }
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

文章来源: wretchant.blog.csdn.net,作者:简简单单OnlineZuozuo,版权归原作者所有,如需转载,请联系作者。

原文链接:wretchant.blog.csdn.net/article/details/77142001

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。