逻辑运算又称布尔运算 布尔用数学方法研究逻辑问题,成功地建立了逻辑演算。他用等式表示判断,把推理看作等式的变换。这种变换的有效性不依赖人们对符号的解释,只依赖于符号的组合规律 。
学习数据结构知识总会用到逻辑运算,所以将此知识再次巩固下,减少对学习数据结构等其它知识的障碍。
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. 位运算符
位运算符:位与’&’,位或’|’,位非’~’,位异或’^’,右移’>>’,左移’<<’,0填充的右移’>>>’
位运算的位与’&’,位或’|’,位非’~’,位异或’^’与逻辑运算的相应操作的真值表完全相同,其差别只是位运算操作的操作数和运算结果都是二进制整数,而逻辑运算相应操作的操作数和运算结果都是逻辑值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的幂。
将一个数右移>>”会使该值除以2的幂。
右移(补零)运算符,即无符号右移,”>>>”永远不会产生负号,因为其符号位总是被补零。 不论被移动数是正数还是负数,左边移进的部分一律补0。
1 |
|
右移和左移操作,是整数机器数的补码表示法。
&运算符规定必须信号A和B都被充电,其结果才是充电。(1表示充电,0表示未充电)
|运算符规定只要信号A或B被充电,输出结果就是充电。
^异或(XOR)运算符规定如果信号A或B之一被充电,但是信号A和B不是同时被充电,则结果为充电。
~运算符也称为按位求补,它翻转所有的充电状态值。
想了解更多技术文章信息,请继续关注wiliam.s Blog,谢谢,欢迎来访!