首页 > 软件 > Java语言中的逻辑与(&&)和逻辑或(||)运算采用 什么方式进行运算。

Java语言中的逻辑与(&&)和逻辑或(||)运算采用 什么方式进行运算。

软件 2022-11-24

java中的短路与(&&)、短路或(||) 与 逻辑与(&)、逻辑或(|)有什么区别啊??

首先名称是不同的:
&&逻辑与  ||逻辑或  它们都是逻辑运算符


& 按位与  | 按位或  它们都是位运算符


if(a==1&&b==2) 这是说既要满足a=1也要满足b=2


if(a==1||b==2) 这是说或者满足a=1或者要满足b=2


而a&b或者a|b则是二进制的与或运算


&同为1时为1,否则为0


|同为0时为0,否则为1


3&5则


0011


&0101


0001


等于1
3|5则


0011


|0101


0111


等于7


&&逻辑与 也叫做短路与 因为只要当前项为假,它就不往后判断了,直接认为表达式为假
||逻辑或 也叫做短路或 因为只要当前项为真,它也不往后判断了,直接认为表达式为真

Java中逻辑运算短路的理解:

短路 就是知如果左侧的表达式能确定运算后的结果,则不再计算右侧的表达式。
如(1>2)&&(2<3) 明明左侧已经为假 了 ,我 不用计算右侧我一定知道 此表达是为假,这样 就好似物理中的电流,当某处短路时,电流直接从一条路通过,而不再管另一条路。
看个例子:


public class Logic{


public static void main(String[] args){
int a = 1;


int b = 1;


if(a


System.out.println(a>b&true);


System.out.println(a);


System.out.println("this's in my control");


else{


System.out.println("that's impossible");


System.out.println(a);


此处由于a


此处的结果为


that's impossible


若假设a的初值为0,此时a


结果应该为和上面一样。

java中逻辑与和逻辑或有一个特殊功能,左侧能决定表达式值时跳过右侧,这种功能时什么?

逻辑短路。以两个表达式相连接的最简情况为例,分为: (1)如果a与b,且a为假,则a与b为假。 (2)如果a或b,且a为真,则a与b为真。 并且可以拓展到n个表达式连接的情况。这个不单是Java有的,基本上包含逻辑运算符的编程语言应该都有的。【摘要】 java中逻辑与和逻辑或有一个特殊功能,左侧能决定表达式值时跳过右侧,这种功能时什么?【提问】 逻辑短路。以两个表达式相连接的最简情况为例,分为: (1)如果a与b,且a为假,则a与b为假。 (2)如果a或b,且a为真,则a与b为真。 并且可以拓展到n个表达式连接的情况。这个不单是Java有的,基本上包含逻辑运算符的编程语言应该都有的。【回答】

java逻辑运算符作用

一般如果要判断两个条件时用&&连接:

如:

if(i<10&&i>0)表示如果变量i的值即大于0,且小10,就执行下面的代码。

boolean ok = false;

if(!ok)

{

System.out.println("ok");

}

//结果会打印ok;

if(!End)return;和if(End==false)return

if(End)return;和if(End==true)return;是一个意思。

扩展资料:

运算符指明对操作数的运算方式。组成表达式的Java操作符有很多种。运算符按照其要求的操作数数目来分,可以有单目运算符、双目运算符和三目运算符,它们分别对应于1个、2个、3个操作数。运算符按其功能来分,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和其他运算符。

参考资料来源:百度百科-JAVA语言运算符

JAVA 中的 -> 是什么意思?

本文主要是讲解 Java 中的运算符。对于运算符而言是编程参与计算的基础核心内容。最基础的加减乘除取余。到后面的逻辑运算大于小于等于不等于。



本文内容思维导图



先从最简单的算术运算符说起。



算术运算符



算术运算符又分为: 一元运算符和二元运算符, 并且在 Java 中包含三元运算符, 就是条件运算符或者叫作三目运算符只是名字不同,含义相同。



一元运算符



一元运算符只有一个变量就可以进行操作。常用的一元运算符就是自加,自减。一共四个一元运算符。



示例代码, 这里使用 JShell 快速查看结果。



需要注意其中的自加和自减的规则。当运算符在前的时候 ++ a; 运算符的优先级比较高, 所以会先处理这个代码, 所以可以看到代码里面直接返回了结果 4。但是 a ++ 的时候却没有直接返回结果, 因为他的运算符比价低。 所以重新调用该变量就会打印出来当前的值。



代码定义如下:



运行查看结果:



二元运算符



二元运算符一共5个。分辨是加减乘除取余(+、-、*、/、%)。



其中,在进行除法运算的时候,遵守除数不能为 0;



如果除数为 0 就会报错, 错误如下:



代码示例如下:



运行查看结果,编译, 运行:



赋值运算符



对于赋值运算符基本上贯穿了整个类的周期。常用的 = 赋值。 和简写赋值和算术运算符的使用方式。赋值运算符有如下图所示的使用方式。



使用 JShell 进行测试代码如下:



代码示例如下:



inta=0;
a=3;
System.out.println(a);// 3
a+=3;
System.out.println(a);// 6
a-=3;
System.out.println(a);// 3
a*=3;
System.out.println(a);// 9
a/=3;
System.out.println(a);// 3
a%=2;
System.out.println(a);// 1



比较运算符



比较运算符, 也可以说是布尔运算符。 主要是比较两个表达式的结果。 (表达式) 操作符 (表达式)



根据上面的运算符进行案例演示, 一定要动手练习。 更能加深印象。



只要知道比较运算是最终得到一个布尔类型的值。并且在进行比较运算的时候, 一定要注意其优先级。代码这次自己动手做吧。 有上面的演示, 应该很容易就搞定。



逻辑运算符



对于逻辑运算符, 主要就是 3 个。 逻辑与、逻辑或、逻辑非。和数学中的与或非意思一致。



格式: 表达式1 逻辑运算符 表达式2



逻辑运算符大多数情况下会和其他的运算符一起使用, 主要做一些简单或复杂的逻辑运算。 并且通常都是和 if, for 等逻辑表达式一起使用。



简单的说一说, 对于逻辑与和逻辑或不同点。 逻辑与为第一个表达式和第二个表达式都等于真值的情况下才会表达式成立。 逻辑或是第一个表达式为真值的情况下, 就不会在执行第二个表达式。 因为不管第二个表达式是否成立, 该逻辑运算都是真值了。



位运算符



对于任何编程语言而言, 最终的操作都是二进制表示, 因为计算机只认识二进制, 而八进制,十进制或者十六进制都是为了让开发人员方便开发。对于 Java 来说, 也可以针对数的某个值进行运算。这就需要位运算符的参与了。也是为了方便对二进制进行操作。



位运算符主要有一下运算符:



位与 &



按位与和逻辑运算符的逻辑与很类似,一个比较的表达式, 一个是按照位来进行判断。在二进制中, 位与的判断为都为 1 的记做 1 否则记做 0。



按位与规则如下:



0 & 0 = 0;
0 & 1 = 0;
1 & 0 = 0;
1 & 1 = 1;



先看一个都是正整数的值 10 & 2。



最终得出结果 0000 1010 & 0000 0010 = 0000 0010 转换成十进制就是2。



对于负值的位与运算有点区别的地方就是参与运算的是补码。



举例说明: 10 & -2



具体如何得到补码, 可以参考我之前写的文章基础类型的相互转换。这里对于负值的情况需要了解什么是原码,反码和补码。参与运算的是补码。-2 的原码是 1000 0010 反码是 1111 1101 补码 在反码的基础最后一位加 1 得到1111 1110。



最终结果得到 0000 1010 & 1111 1110 = 0000 1010 十进制也就是 10。



这个时候怎么校验结果是否正确呢? 直接写 Java 代码就好了, 打开 jshell:



位或 |



按位或, 和逻辑或很类似, 只要二者有一位 1 结果就是 1。



按位或规则如下:



0 | 0 = 0;
0 | 1 = 1;
1 | 0 = 1;
1 | 1 = 1;



根据上面的运算得到了 10 | 2 = 10。



负值有略有不同。



还是要灵活运用原码反码和补码,特别是负数的情况下, 因为正数的原码和补码一致。



位反 ~



按位反, 和逻辑非类似。 是对位进行直接取反。



按位反规则如下:



~1 = 0;
~0 = 1;



先用 2 进行运算处理:



在进行 -2 的运算操作



-2 的原码 需要转换成补码, 用补码进行取反运算。 得到 1 的二进制。



代码演示如下:



位异或 ^



位异或是基于二进制的位运算。 采用符号 XOR 在 Java 中使用 ^ 进行表示。两个值相同取 0, 不同的取 1。



按位异或规则如下:



1 ^ 1 = 0;
0 ^ 0 = 0;
1 ^ 0 = 1;
0 ^ 1 = 1;



举例 10 ^ 2



举例 10 ^ -2



代码演示结果的准确性:



异或在代码优化和实际的工作中会经常用到。 后续实战中用到了在详细分析用法, 现在知道进行异或运算即可。



位左移 <<



将一个操作数进行二进制位往左移, 移动后空出来的低位用 0 进行填充。移除的高位舍去。高位丢弃,低位补零。



操作数 << 移动的位数



举例说明 10 << 2



位左移代码演示:



位右移 >>



将一个操作数进行二进制往右移, 移动后,有两种情况,一种有无符号一种是有符号。也就是最高位为 0 移动后高位补 0, 如果最高位(符号位)为 1, 移动后空缺位都为 1.



操作数 >> 移动的位数



举例说明 10 >> 2



对于负数举例 -2 >> 2 空缺位补 1:



位右移代码演示:



注意这两者的区别。



无符号位右移 >>>



这个是和右移操作上是一致的, 但是不管是否最高位(符号位)为 1, 空缺位都使用 0 进行补齐。



操作数 >>> 移动的位数



举例说明 10 >>> 2



对于负数来说。 这里有点区别, 因为对于负值来说, 上面其实都是 32 位, 为了让大家看起来舒服转换成了对应的 8 位的。 因为无符号位右移会改变正负值, 所以 32 位的负值和 8 位的负值是不一致的。



并且 Java 在处理 byte, short , char 等值进行移位操作前, 会先将类型转换成 int 因为 int 占用 32 位。



所以 -2 >>> 2 的时候,8 位运算应该是如下:



因为会先转换成 32 位。 所以 32 位的 -2 等于如下:



也就是结果: 1073741823



无符号位右移代码如下:



理解原理。 更能发现问题。



类型比较运算符



这里说的类型比较是对象的比较。 判断每个定义的变量是否是某个类。该类可以是(接口、抽象类)。



语法规则:



boolean = 变量 instanceof 类



举例说明:



运行查看结果:



这里需要注意:



  • null 值是没有引用的, 所以和任何值都不相等。

  • instanceof 比较的是引用类型, 不能用于基础类型的比较。

  • 条件(三目)运算符

    三目运算在 Java 中只有一个就是 ? :

    三目运算的语法格式:

  • `布尔表达式 ? 表达式1 : 表达式2`

  • 大部分情况下, 对于三目运算是 if 和 else 的简写。举例说明:

  • inta=1;intb=2;

  • Stringmsg=a>b?"a 比 b 大":"a 比 b 小";

  • System.out.println(msg);

  • //上面的结果和下面一致

  • if(a>b){

  • msg="a 比 b 大!";

  • }else{

  • msg="a 比 b 小!";

  • }

  • //msg 是 "a 比 b 小!"
  • 运算符的优先级

    所有的数学运算都是从左向右进行运算的, 对于 Java 来说大部分运算也是遵守从左向右的规则。 但是一元运算符,赋值运算符和三目运算符例外。他们是从右向左进行运算。

    运算符的内容告一段落, 接下来就是开始逻辑表达式的学习。 教程编写不易。希望各位大看官点赞收藏加关注。更多内容大放送。

Java的"逻辑与"和"短路与"的问题!

我不准备回答你所有问题,简单的说两句你自己应该能理解。 &&:两边必须是boolean变量或返回值为boolean的表达式。 boolean a = true; boolean b = false; a && b 返回false。 int a = 3; int b = 4; (a == 5) && (b == 4) 首先第一个条为false,直接返回,不计算后边。所以说&&就是短路与。 &:准确的说这个叫按位与。两边必须是某种可转换为byte的数值类型。 int a = 2; int b = 4; a & b 返回a 的二进制和b的二进制按位与的值。 相当于: 00000010 a 00000

标签:信息技术 Java Java编程 编程

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18