Java----逻辑运算符,位运算符

   逻辑运算符:

           &&(且或者与):逻辑与运算:两个变量都为真,结果就为真,也就是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

到这里大家是不是明白了位运算的运算方式了!

   

.Net Core
原文地址:https://www.cnblogs.com/zpy1993-09/p/14945994.html