逻辑运算符:
&&(且或者与):逻辑与运算:两个变量都为真,结果就为真,也就是true,反之,只要有一个为假那么结果就是假,也就是false
||(或):两个变量只要有一个为真,那么结果就是真,也就是true
!(非):逻辑非运算:如果为真则非真为假,如果为家则非假为真。
接下我们测试一下逻辑运算符:
import java.util.Arrays; public class MyJava { public static void main(String[] args) { boolean a=true; boolean b=false; System.out.println("a&&b="+(a&&b)); //逻辑与运算:两个变量都为真,结果就为真,也就是true,反之,只要有一个为假那么结果就是假,也就是false System.out.println("a||b="+(a||b)); //逻辑或运算:两个变量只要有一个为真,那么结果就是真,也就是true System.out.println("!a&&b="+(!a&&b));//逻辑非运算:如果为真则非真为假,如果为家则非假为真。 } }
上面也就是逻辑运算的基本用法了!
接下来我们要讲一下位运算了,这个有点难理解了。
位运算符:&(与),|(或),^(非),~(取反),>>(右移),<<(左移),>>>(只要了解就行)
我们知道位一般都是二进制数字:例如
数字0表示 : 0000 0000
数字1表示:0000 0001
数字2表示: 0000 0010
数字3表示: 0000 0011 .......
数字8表示: 0000 1000
那么他们到底是如何换算的呢:举个例子
上面8表示的位是:0000 1000 为什么等于8 因为这个位数是二进制的 所以 8= 0^(8-1)+0^(7-1)+0^(6-1)+0^(5-1)+2^(4-1)+0^(3-1)+0^(2-1)+0^(1-1)=8
看上去好像还是糊里糊吧!我做个图大家估计都明白怎末回事了:
注意出现1和0 ,我查了一下到底什么意思,大概意思就是 1表示开,0表示关,也就是所谓的真或者假,true或者false
出现true表示1 ,因为位是二进制 所以换算成十进制为:2^(4-1)=2^3=8 如果是0的话表示false,所以就是0的多少次方。
通过上面的解释应该都知道十进制数和二进制数的转换了吧
接下来我们定义:
A= 0000 1100
B= 1100 0101
A&B=0000 0100
同理:
~B=0011 1010 (对B进行取反 也就是原来0变成1,原来1变成0)
下面又一个问题来了:
2*4=8 如何运算最快?
8是不是等于 2*2*2 ,大学的时候相信都学过一门课叫做计算机组成原理,都上过实验课吧! 无非就是遇到1灯亮,0灯灭吗。哈哈哈 ! 我们现在学的语言都是从底层一点一点封装起来的,我们从底层实现显然是最快的了。
想一下如果我将2向做移动2为会得到上面结果?
那么我们就通过代码测试一下:
import java.util.Arrays; public class MyJava { public static void main(String[] args) { System.out.println(2<<2);//左移 System.out.println(2>>1);//右移 } }
测试的结果是2左移2位是8,右移1位是1.
那到底是怎末做的呢?
首先 我们知道 2的位数是 0000 0010 向左移动2位是:0000 1000 二进制转换成十进制是: 0^(8-1)+0^(7-1)+0^(6-1)+0^(5-1)+2^(4-1)+0^(3-1)+0^(2-1)+0^(1-1)=8
同理向左移动一位是: 0000 0001 二进制转换成十进制是:0^(8-1)+0^(7-1)+0^(6-1)+0^(5-1)+0^(4-1)+0^(3-1)+0^(2-1)+2^(1-1)=2^0=1
到这里大家是不是明白了位运算的运算方式了!