当前位置: 首页 > 编程笔记 >

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

谷梁楷
2023-03-14
本文向大家介绍比Math类库abs()方法性能更高的取绝对值方法介绍,包括了比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;
 }

如果换种方式,性能会有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);
 }

奇数偶数的判断

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。

 类似资料:
  • 本文向大家介绍JavaScript中Math对象的方法介绍,包括了JavaScript中Math对象的方法介绍的使用技巧和注意事项,需要的朋友参考一下 1.比较最值方法 比较最值有两种方法,max() 和 min() 方法。 1.1 max() 方法,比较一组数值中的最大值,返回最大值。 1.2 min() 方法,比较一组数值中的最小值,返回最小值。 2.数值舍入方法 2.1 ceil() 方法,

  • 本文向大家介绍js中取得变量绝对值的方法,包括了js中取得变量绝对值的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js中取得变量绝对值的方法。分享给大家供大家参考。具体分析如下: 绝对值在js中我们直接使用abs函数来求,这里就来整理一些关于js中取得变量的绝对值的方法,以便让大家更深入的理解js绝对值的用法 js中的绝对值不怎么常用到,今天在写一个方法的时候遇到了,于是记录下来,

  • 主要内容:静态常量,求最大值、最小值和绝对值,求整运算,三角函数运算,指数运算Java 中的 +、-、*、/ 和 % 等基本算术运算符不能进行更复杂的数学运算,例如,三角函数、对数运算、指数运算等。于是 Java 提供了 Math 工具类来完成这些复杂的运算。 在 Java 中 Math 类封装了常用的数学运算,提供了基本的数学操作,如指数、对数、平方根和三角函数等。Math 类位于 java.lang 包,它的构造方法是 private 的,因此无法创建 Math 类的对

  • 问题内容: 我正在通过缓冲读取器机制读取日志文件,该机制占用的总执行时间以毫秒为单位:12944,请告知我该如何提高性能并降低该时间,请注意,尼奥比缓冲读取器的性能更好。 !文件大小为10MB,因为它是一个日志文件。也请告知使用nio也可以实现相同的目的.. !! 问题答案: 由于OP渴望了解如何使用NIO来完成此操作。 由于文件很小,很难看到差异,但是可以测量。 打印每一行的长度为102字节,因

  • 其实就是针对一些图片实际使用场景而封装的方法,因为生成结果是图片不方便验证结果,所以请自行肉眼判断 添加水印 添加位置默认提供9个选择: Images.WATERMARK_TOP_LEFT Images.WATERMARK_TOP_CENTER Images.WATERMARK_TOP_RIGHT Images.WATERMARK_CENTER_LEFT Images.WATERMARK_CENT

  • 本文向大家介绍pandas中apply和transform方法的性能比较及区别介绍,包括了pandas中apply和transform方法的性能比较及区别介绍的使用技巧和注意事项,需要的朋友参考一下 1. apply与transform 首先讲一下apply() 与transform()的相同点与不同点 相同点: 都能针对dataframe完成特征的计算,并且常常与groupby()方法一起使用。