Java中逻辑与,逻辑或,按位与,按位或的区分

一直以来,对这样的概念很是模糊,今天总结了一下

先说说逻辑与(&&),逻辑或(||) 
他们是短路形式的,举例说明 
int i = 0; 
   System.out.println ( i++ == 1 && i++ == 2);//打印false 
   System.out.println (i);//打印1 
//这里先判断i++是否等于1,因为是右自增,所以这里i++ == 1是错误的,短路就是说不用执行后面的i++ == 2了, 
  直接返回一个false,所以这就是最后结果为什么打印1的原因了 
i = 0;//这里重新赋值,为了下面的例子明了 
   System.out.println ( ++i == 1 && i++ == 2);//打印false 
   System.out.println (i);//打印2 
//而这里刚好相反,++i是等于1的,所以就执行了后面的i++ == 2,最终的i的值也就打印2了 
逻辑与是当两边的运算都为true时,才返回true,否则返回false,如果左边返回false,就直接返回false,不再继续执行右边的代码了 
逻辑或是只要有左边的时是true时,就返回true,不再执行右边的代码,但如果左边的值为false,则返回右边运算的结果

按位与& 按位或|

它们和逻辑与,逻辑或是一样的,区别就是非短路运算,即&运算符,即使左边是false,也要执行右边代码;|即使左边是true,也要执行右边代码 
还有一点需要指出的区别就是 
逻辑与,逻辑或在Java中运算符必须是boolean类型的,而按位与,按位或可以是int类型的, 
下面我举例说明他们是如何运行的

System.out.println( 5&3);//(代码1) 打印结果1 
   System.out.println( 5|3);//(代码2) 打印结果7 
   System.out.println( 4&2);//(代码3) 打印结果0 
   System.out.println( 4|2);//(代码4) 打印结果6

二进制码如下: 
//5 101      4 100  
//3 011      2 010  
//& 001        000  
//| 110        110

按位与的运算:

看注释3对于注释1和2,会发现除了两位都是1的时候,其余情况下&的结果都是0

按位或的运算:

两个数中都为0的时候结果为0,否则结果为1

时间: 2024-10-09 05:42:26

Java中逻辑与,逻辑或,按位与,按位或的区分的相关文章

黑马程序员--Java中的反射逻辑

------- <a href="http://www.itheima.com" target="blank">android培训</a>.<a href="http://www.itheima.com" target="blank">java培训</a>.期待与您交流! ---------- 1 .      反射是在运行状态中,对于任意一个类(class文件),都能够知道这个

Java中逻辑&amp;和短路&amp;&amp;,逻辑|和短路||的区别

Java中逻辑&和短路&&的区别是:逻辑&需要判断&符号左边和右边的两个条件,而短路&&,如果&&符号左边的是真,才会判断右边:如果&&符号左边为假,则走else. eg. public class Demo { public static void main (String [] args) { int a = 4; int b = 3; int c = 0; if(a<b & b/c == 0) {

oracle sql语句中使用if逻辑

l在 SQL 语句中使用IF-THEN-ELSE 逻辑 l l使用两种方法: •CASE 表达式:SQL99的语法,类似Basic,比较繁琐 •DECODE 函数:Oracle自己的语法,类似Java,比较简介 1 SQL> select ename,job, sal, case job when 'PRESIDENT' then 1.1*sal 2 2 when 'MANAGER' then 1.2*sal 3 3 when 'CLERK' then 1.3*sal 4 4 else 1.4*

[原著]java或者Js 代码逻辑来处理 突破 oracle sql &ldquo;IN&rdquo;长度的极限的问题

注:本文出自:博主自己研究验证可行   [原著]java或者Js  代码逻辑来处理  突破 oracle  sql "IN"长度的极限的问题    在很多的时候 使用 select  *  from  tab_name t where  t.id in (1,2----1000) ;  的固定方式来查询数据的时候.会有一种这个情况出现: 则是 in 里面的内容 太长了: 而 oracle数据库支持的长度是 100个内容.          那么对于这个情况该怎么办呢.其实是很简单的,i

将应用程序中的商业逻辑同对其提供支持的通用服务进行分离(转)

AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入封装.继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合.当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力.也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系.例如日志功能.日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系.对于其

Lua中面板显示逻辑问题

在打开一个面板时,要考虑到把其它的面板关掉,一定要考虑周全,任何一个不该显示的面板全部关掉,可以用以下两个接口测试显示和隐藏的面板 --设置面板显示时的回调函数,此函数接受1个参数[面板名] [email protected] {function} func 脚本回调函数 function obj:setOnPanelShowScriptFunc(func) end --设置面板隐藏时的回调函数,此函数接受1个参数[面板名] [email protected] {function} func 脚

关于线程池运行过程中,业务逻辑出现未知异常导致线程中断问题反思

最近在项目研发中的关于线程池应用过程中由于业务逻辑异常导致的线程中断,但程序未中断导致的脏数据问题  话不多说,在最近最新的一个版本发布过程中,业务需要,我们要定期去给客户预留出可用的资源数据,提供客户使用,在版本即将上线前一周测试过程中,遇到的预留资源数据跟实际数据不匹配,刚开始反复检查代码,通过日志调试一直无果,经过不懈努力,最终终于发现是由于线程在跑业务时,抛出未知异常,当前线程中断,然而主程序并未异常,导致最终响应的数据与实际不符.下面我就简答举例说明下这个问题 1.获取资源数据demo

大话Java中的哈希(hash)结构(一)

o( ̄▽ ̄)d 小伙伴们在上网或者搞程序设计的时候,总是会听到关于“哈希(hash)”的一些东西.比如哈希算法.哈希表等等的名词,那么什么是hash呢? 一.相关概念 1.hash算法:一类特殊的算法(注意哦,hash算法并不是某个固定的算法,而是一类特殊功能算法的统称). 2.哈希表(hash table).哈希映射(hash map).哈希集合(hash set):一种基于hash算法的数据结构. 3.哈希函数:在hash算法中的核心函数. 4.map:译为“映射”,是一种从键(key)到值

Java中的二进制及基本的位运算

Java中的二进制及基本的位运算 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一",借位规则是"借一当二",由18世纪德国数理哲学大师莱布尼兹发现.当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的.计算机中的二进制则是一个非常微小的开关,用"开"来表示1,"关"来表示0. 那么Java中的二进制又是怎么样的呢?让我们一起来揭开它神