Java的&&和&,||和|,位运算详解

createh54个月前 (02-01)技术教程70

《大数据和人工智能交流》头条号向广大初学者新增C 、Java 、Python 、Scala、javascript 等目前流行的计算机、大数据编程语言,希望大家以后关注本头条号更多的内容。


java逻辑运算和位运算总结


1. &&和&有什么区别? ||与|有什么区别?

(1)&&表示短路与

(2)对于&与来说,所有条件都要判断,而如果使用短路与,如果第一个条件为false,则后面的条件将不在判断


(1)||表示短路或

(2)对于或|来说,要求说有条件都要判断,而如果使用短路或,如果第一个条件为true,怎后面的条件将不在判断

例如

"与"的功能:

【1】&的功能

public class OperateDemo10{

public static void main(String args[]){

if(10!=10&10/0==0){ //10!=10和10/0两个条件都判断了;程序报错

System.out.println("条件满足") ;

}

}

};

【2】短路与的功能

public class OperateDemo11{

public static void main(String args[]){

if(10!=10&&10/0==0){ //只要第一个条件满足,往后代码不在执行,不报错

System.out.println("条件满足") ;

}

}

};

"或"的功能:

【1】|的功能

public class OperateDemo12{

public static void main(String args[]){

if(10==10|10/0==0){ //所有条件都要判断

System.out.println("条件满足") ;

}

}

};


【2】||的功能

public class OperateDemo13{

public static void main(String args[]){

if(10==10||10/0==0){ //第一个条件满足, 将不在判断

System.out.println("条件满足") ;

}

}

};


java逻辑运算和位运算总结(二)


2.如何处理取反运算符~?

【1】对于整数来说:

public class BitOperation {

public static void main(String args[]){

int a=5;

System.out.println("~a="+(~a));

}

}

运算结果是-6

首先你要知道现在我们用的多数都是32位机,所以整形数都是4个字节

那么再看看按位取反的结果:


00000000 00000000 00000000 00000101 这是5


00000000 00000000 00000000 00000000 这是0

11111111 11111111 11111111 11111111 这是-1

11111111 11111111 11111111 11111110 这是-2

11111111 11111111 11111111 11111101 这是-3

11111111 11111111 11111111 11111100 这是-4

11111111 11111111 11111111 11111011 这是-5

11111111 11111111 11111111 11111010 这是5取反的结果-6

【2】对于负数来说

public class OperateDemo16{

public static void main(String args[]){

int x = -3 ; //-3 应该以补码的形式存在,补码 = 反码 + 1

System.out.println(~x) ;

}

};

其中第一位表示符号位

1000000 00000000 00000000 00000011 -> -3的原码

1111111 11111111 11111111 11111100 -> -3的反吗

1111111 11111111 11111111 11111101 -> -3补码

0000000 00000000 00000000 00000010 -> ~-3取反


3.如何处理左移和右移

public class OperateDemo18{

public static void main(String args[]){

int x = 3 ; // 3的二进制数据: 00000000 00000000 00000000 00000011

int y = -3 ; // -3的二进制数据: 11111111 11111111 11111111 11111101

System.out.println(x + "右移2位之后的内容:" + (x>>2)) ;

System.out.println(y + "右移2位之后的内容:" + (y>>2)) ;

}

};


关于无符号右移

public class OperateDemo19{

public static void main(String args[]){

int x = 3 ; // 3的二进制数据: 00000000 00000000 00000000 00000011

int y = -3 ; // -3的二进制数据: 11111111 11111111 11111111 11111101

System.out.println(x + "右移2位之后的内容:" + (x>>>2)) ;

System.out.println(y + "右移2位之后的内容:" + (y>>>2)) ;

}

};


00000000 00000000 00000000 0000011 ->3的原码

补2个0 移出2位

00000000 00000000 00000000 000000011 ->无符号右移2位 结果为0


11111111 11111111 11111111 111111101 ->-3的补码(-3在计算机以补码存在)

补2个0 移出2位

00111111 11111111 11111111 11111111101 ->无符号右移2位 结果为数很大



《大数据和人工智能交流》的宗旨

1、将大数据和人工智能的专业数学:概率数理统计、线性代数、决策论、优化论、博弈论等数学模型变得通俗易懂。

2、将大数据和人工智能的专业涉及到的数据结构和算法:分类、聚类 、回归算法、概率等算法变得通俗易懂。

3、最新的高科技动态:数据采集方面的智能传感器技术;医疗大数据智能决策分析;物联网智慧城市等等。

根据初学者需要会有C语言、Java语言、Python语言、Scala函数式等目前主流计算机语言。

根据读者的需要有和人工智能相关的计算机科学与技术、电子技术、芯片技术等基础学科通俗易懂的文章。

相关文章

JDK 17 - Java 17 的新特性速览(jdk17 lts)

JDK 17 于 8 月 5 日进入候选发布阶段,最终候选版本将于 8 月 19 日发布。所有功能/JEP 集都被冻结以进行目标发布。有 10 个新功能 + 2 个功能删除 + 2 个功能弃用,还有...

我的世界内存错误提示怎么办如何修改

我的世界是一款沙盒游戏,所呈现的世界并不是华丽的画面与特效,而是注重在游戏性上面。在游戏中,常常有玩家反映,经常提示内存错误,怎么办?有的玩家估计是自己装的是32位的Java,尝试将最大内存调节到小于...

Java面试必考问题:对象在内存中是如何布局的?

对象的内存布局在HotSpot虚拟机中,对象在内存中的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对象填充(Padding)。实例数据: 包括了对象的所有成员...

程序员,背熟这99道Java多线程面试题,和面试官扯皮就没问题了

作者:享学课堂链接:https://www.jianshu.com/p/3e88a5fe75f0前言今天给大家更新的是一篇关于多线程面试的文章,也是霸哥根据时下热门的面试内容给大家进行总结的,如有雷同...

什么?Java 中的锁还有状态?(java中锁的概念)

线程如果锁住了某个资源,致使其他线程无法访问的这种锁被称为悲观锁,相反,线程不锁住资源的锁被称为乐观锁,而自旋锁是基于 CAS 机制实现的,CAS又是乐观锁的一种实现,那么对于锁来说,多个线程同步访问...