首页 > 其他分享 >%和&区别

%和&区别

时间:2023-12-29 12:00:17浏览次数:29  
标签:取模 运算 结果 性能 区别 操作符 操作

在 Java 8(以及其他版本的 Java)中,&(按位与)和 %(取模)是两种完全不同的运算符,它们在大多数情况下给出不同的结果。然而,在某些特定情况下,它们的结果可能会相同。这种情况主要发生在涉及特定数值的操作中。

何时结果相同
当 % 运算的除数是 2 的幂时(例如 2, 4, 8, 16 等),并且被操作的数是非负数时,% 和 & 可能会有相同的结果。在这种情况下,% 运算的结果等同于与除数减 1 的按位与操作的结果。例如:

当 n % 2 时,等同于 n & 1。
当 n % 4 时,等同于 n & 3。
当 n % 8 时,等同于 n & 7。
这是因为 2 的幂次减 1 产生的是一个所有低位都是 1 的二进制数,这与取模运算的结果相匹配。

何时结果不同
在所有其他情况下,& 和 % 的结果通常是不同的。特别是当:

% 运算的除数不是 2 的幂。
被操作的数是负数(取模运算的行为与正数不同)。
进行更复杂的数学运算时,这些运算符的本质区别就显现出来。
举个例子,7 % 5 的结果是 2,而 7 & 5(二进制下 0111 & 0101)的结果是 5,两者完全不同。

综上所述,虽然在某些特定的、简单的情况下 & 和 % 可以给出相同的结果,但它们在大多数情况下是不同的,并且用于解决不同类型的问题。

 

在Java中,%&操作符的性能区别是很小的,因为它们都是基本的运算符,并且在底层都有对应的指令来执行。通常情况下,它们的性能差异不会对程序的整体性能产生显著影响。

%操作符执行的是取模运算,涉及除法操作,而除法操作通常比较耗时。因此,在某些情况下,如果有大量的取模运算需要进行,可能会对性能产生一定影响。但是,现代的处理器通常会对除法操作进行优化,以提高性能。

&操作符执行的是位与运算,涉及对两个整数的二进制位进行按位与操作。位运算通常是非常快速的操作,因为它可以直接在硬件层面上进行并行计算。

总体而言,%操作符的性能可能略低于&操作符,但差异通常是微小的。在大多数情况下,这种差异对程序的性能影响是可以忽略不计的。因此,在选择使用%&操作符时,更重要的是根据实际需求和语义来选择,而不是过于关注性能差异。

当然,对于特定的应用场景,如果对性能要求非常高,可能需要使用更高级的优化技术来减少取模运算的次数或者使用其他替代方案。但这需要根据具体的情况进行评估和测试。

标签:取模,运算,结果,性能,区别,操作符,操作
From: https://www.cnblogs.com/leeconblogs/p/17934596.html

相关文章

  • js里URL编码的不同方法和区别
    总结:1.escape/unescape这两个方法不能用于URL编码,但有很多人用,特此指出,因为它的真正作用是返回一个字符的Unicode编码值,不会对"+"进行编码,但是我们知道,网页在提交表单的时候,如果有空格,则会被转化为+字符。服务器处理数据的时候,会把+号处理成空格。2.encodeURI/decodeURI......
  • 协程的分类与真假协程的区别
    协程可以按执行类型分为三大类:生成器协程(GeneratorCoroutines)、无栈协程(StacklessCoroutines)和有栈协程(StackfulCoroutines)。1.生成器协程(GeneratorCoroutines):生成器协程是一种在函数执行期间可以暂停和恢复的特殊函数。它使用生成器函数和yield关键字来实现。生成器协......
  • Java-继承:重载与重写的区别
    一、重写(Override)子类继承父类,子类重写父类中的所有公共方法,覆盖父类的方法并对其重写。注意事项:重写前后方法名相同;参数列表相同;返回值相同子类重写的方法所抛出的异常必须与父类中的被重写方法的异常一致,或者不能比父类的异常范围更大。父类的私有方法不能被重写,如果子类非要......
  • 什么是意向锁?它和意向书有什么区别?
    最近受废话文学的影响,所以有了今天的这个标题,希望大家能喜欢。大家不喜欢也没关系,反正我喜欢。鲁迅先生曾经说过“我家门前有两棵树,一棵是枣树,另一棵还是枣树。”,由此可见,这老爷子算是把废话文学给玩明白了。希望大家也能,听君一席话,如听一席话吧。聊正题聊完闲篇,咱们说回正题......
  • `pip` 和 `pip3` 是 Python 的包管理工具,它们可以用来查找、下载、安装和卸载 Python
    `pip`和`pip3`是Python的包管理工具,它们可以用来查找、下载、安装和卸载Python包¹。这两个命令的区别主要取决于你的系统中安装的Python版本¹³⁴⁵:-如果你的系统中只安装了Python2,那么只有`pip`可以使用³。-如果你的系统中只安装了Python3,那么`pip`和`pi......
  • 项目中使用spring.session.store-type=redis和@EnableRedisHttpSession 的区别
    spring项目的session存在哪里SpringSession提供了多种存储策略,可以选择将session存储在内存、数据库或Redis缓存中。内存存储:这是默认的存储方式,适用于单个应用程序的情况。SpringSession会在应用程序启动时创建一个ConcurrentHashMap对象,用于存储session数据。JDBC存......
  • Windows系统中Run对话框输入URL和IP地址的区别
    Windows系统中Run对话框输入URL和IP地址的区别在Windows系统中,我们可以通过Run对话框快速执行一些命令或者打开一些应用程序。当我们在Run对话框中输入URL(比如//www.baidu.com)和IP地址(比如\192.168.3.194)时,两者有一些区别。本篇博客将详细探讨这些区别。1.URL和IP地址的基本概......
  • vue2中 watch和computed的区别
    计算属性(Computed):computed是基于依赖关系进行缓存的。只有当相关的响应式依赖发生改变时,才会重新求值。适合于执行更复杂的数据操作。computed属性是计算出来的,不会对原始数据造成任何副作用。computed属性可以具有setter和getter方法,可以更灵活地控制数据的操作。......
  • MyBatis中获取参数值的两种方式:${} 和 #{},以及它们之间区别是什么?
    MyBatis中获取参数值的两种方式${}:的本质就是字符串拼接#{}:的本质就是占位符赋值①使用${}占位符,在字符串拼接的方式拼接sql,若为字符串类型或为日期类型的字段进行赋值时,需要手动加单引号②使用#{}占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时......
  • uni-app和Vue.js有什么区别?
    Hello,大家好,我是咕噜铁蛋!在当今的前端开发领域,uni-app和Vue.js都是非常热门的技术。很多开发者经常在选择时感到困惑。今天铁蛋这篇文章讲和大家探讨这两者的区别,帮助各位在开发路上做出明智的选择。1.uni-app是一个使用Vue.js开发所有前端应用的框架,支持一次编译多端运行。开发者......