Java二进制与或非运算,java逻辑运算与位运算

逻辑运算又称布尔运算 布尔用数学方法研究逻辑问题,成功地建立了逻辑演算。他用等式表示判断,把推理看作等式的变换。这种变换的有效性不依赖人们对符号的解释,只依赖于符号的组合规律 。

学习数据结构知识总会用到逻辑运算,所以将此知识再次巩固下,减少对学习数据结构等其它知识的障碍。

1.基本概念

逻辑常量与变量:逻辑常量只有两个,即0和1,用来表示两个对立的逻辑状态。逻辑变量与普通代数一样,也可以用字母、符号、数字及其组合来表示,但它们之间有着本质区别,因为逻辑常量的取值只有两个,即0和1,而没有中间值。

逻辑运算:逻辑运算:在逻辑代数中,有与、或、非三种基本逻辑运算。表示逻辑运算的方法有多种,如语句描述、逻辑代数式、真值表、卡诺图等。

2.java中的逻辑运算符和位运算符

2.1. 逻辑运算符

逻辑运算符: 逻辑与’&&’,逻辑或’||’,逻辑非’!’,逻辑异或’^’,逻辑与’&’,逻辑或’|’

逻辑运算真值表:下面的or=|| 和 wor=|

A

B

A&&B

A or B

!A

A^B

A&B

A wor B

false

false

false

false

true

false

false

false

true

false

false

true

false

true

false

true

false

true

false

true

true

true

false

true

true

true

true

true

false

false

true

true

A和B是逻辑运算的两个逻辑变量;

两种逻辑与(&&和&)的运算规则基本相同,两种逻辑或(||和|)的运算规则也基本相同。

&和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能。

对于&来说,如果左侧条件为false,也会计算右侧条件的值,而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。

所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。

对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false。

所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程;

对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。

所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。

利用短路现象:

在程序设计时使用&&和||运算符,不建议使用&和|运算符。

注:异或相同为false,相反则为true。

2.2. 位运算符

位运算符:位与’&’,位或’|’,位非’~’,位异或’^’,右移’>>’,左移’<>>’

位运算的位与’&’,位或’|’,位非’~’,位异或’^’与逻辑运算的相应操作的真值表完全相同,其差别只是位运算操作的操作数和运算结果都是二进制整数,而逻辑运算相应操作的操作数和运算结果都是逻辑值boolean型。

运算规则,下面的or=|| 和 wor=|

A

B

A&B

A wor B

A^B

0

0

0

0

0

1

0

0

1

1

0

1

0

1

1

1

1

1

1

0

简单的说

&:与运算。只有同为真时才为真,近似于乘法。

|:或运算。只有同为假时才为假,近似于加法。

^:异或运算。相同为假,不同为真。

位运算符说明,下面的or=|| 和 wor=|

运算符

名称

示例

说明

&

位与

x&y

把x和y按位求与

wor

位或

x wor y

把x和y按位求或

~

位非

~x

把x按位求非

^

位异或

x^y

把x和y按位求异或

>>

右移

x >> y

把x的各位右移y位

<<

左移

x << y

把x的各位左移y位

>>>

右移

x >>> y

把x的各位右移y位,左边填0

下边为位&运算:

int a = 15; //x等于二进制数的00001111

int b = 6; //y等于二进制数的00000110

int c = x&y //z等于二进制数的00000110

结果为: 二进制数的00000110

右移是将一个二进制数按指定移动的位数向右移位,移掉的被丢弃,左边移进的部分或者补0(当该数为正时),或者补1(当该数为负时)。这是因为整数在机器内部采用补码表示法,正数的符号位为0,负数的符号位为1。

将一个数左移”<

将一个数右移>>”会使该值除以2的幂。

右移(补零)运算符,即无符号右移,”>>>”永远不会产生负号,因为其符号位总是被补零。 不论被移动数是正数还是负数,左边移进的部分一律补0。

1

2

3

4

5

6

7

8

9

10

111<<3 = 8

8>>3 = 1

int x = 70; //x等于二进制数的01000110

int y = 2;

int z = x>>y //z等于二进制数的00010001

即运算结果为z等于二进制数00010001,即z等于十进制数17。

int x = -70; //x等于二进制数的11000110

int y = 2;

int z = x>>y //z等于二进制数的11101110

即运算结果为z等于二进制数11101110,即z等于十进制数-18。

右移和左移操作,是整数机器数的补码表示法。

&运算符规定必须信号A和B都被充电,其结果才是充电。(1表示充电,0表示未充电)

|运算符规定只要信号A或B被充电,输出结果就是充电。

^异或(XOR)运算符规定如果信号A或B之一被充电,但是信号A和B不是同时被充电,则结果为充电。

~运算符也称为按位求补,它翻转所有的充电状态值。

想了解更多技术文章信息,请继续关注wiliam.s Blog,谢谢,欢迎来访!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值