• 20130320java基础学习笔记逻辑运算符和位运算


    1.逻辑运算符:用语连接两个boolean类型的表达式;
    &(与):
    &:运算特点:
    true & true = true;
    true & false = false;
    false & true = false;
    false & false = false;
    &:运算规律:
    &运算的两边只要有一个为false,那么结果一定为false,只有两边都为true,结果才为true;

    |(或):
    |:运算特点:
    true | true = true;
    true | false = true;
    false | true = true;
    false | false = false;
    |:运算规律:
    |运算的两边只要有一个为true,那么结果一定为true,只有两边都为false,结果才为false;

    ^(异或):和或有点不一样;
    ^:运算特点:
    true ^ true = false;
    true ^ false = true;
    false ^ true = true;
    false ^ false = false;
    ^:运算规律:
    ^符号两边的结果如果相同,结果为false,两边的结果不同,结果为true;

    !(非):非运算用来判断事物的另一面;
    !true = false;
    !false = true;
    !!true = true;

    面试题:
    &&(双与):和&运算的结果是一样的,但是运算过程有点区别;
    &和&&的区别:
    &:无论左边的运算结果是什么,右边都参与运算;
    &&:当左边的运算结果为false时,右边不参与运算;

    ||(双或):和|运算的结果是一样的,但是运算过程有点区别;
    |和||的区别:
    |:无论左边的运算结果是什么,右边都参与运算;
    ||:当左边的运算结果为true时,右边不参与运算;


    ~(取反):即将二进制数中的0变1,1变0;
    负数的二进制值 = 正数的的二进制值取反 + 1(负数的二进制值最高为始终为1);如-5的二进制值的算法如下:
    0000-0000 0000-0000 0000-0000 0000-0101 ---5对应的二进制值;
    1111-1111 1111-1111 1111-1111 1111-1010 ---取反,即将0变为1,1变为0;
    +0000-0000 0000-0000 0000-0000 0000-0001
    -----------------------------------------
    1111-1111 1111-1111 1111-1111 1111-1011 --->这个即是-5的二进制值;
    由此可算出取反值X,X+1=-5 -----> ~5 = -6;


    2.位运算:位运算是直接对二进制进行运算的
    &(与运算):
    6 & 3 = 2;
    0000-0000 0000-0000 0000-0000 0000-0110
    &0000-0000 0000-0000 0000-0000 0000-0011 ---->&运算特点:直接拿1去取上面的值;
    -----------------------------------------
    0000-0000 0000-0000 0000-0000 0000-0010

    |(或运算):
    6 | 3 = 7;
    0000-0000 0000-0000 0000-0000 0000-0110
    |0000-0000 0000-0000 0000-0000 0000-0011--->|运算特点:直接取有效位,即为1(真)的就取;
    -----------------------------------------
    0000-0000 0000-0000 0000-0000 0000-0111

    ^(异或运算):一个数异或同一个数两次,结果还是这个数(6^3^3=6);---应用:异或可以用来加密解密,连续异或两次得到的还是原来的数;
    6 ^ 3 ^ 3 = 6;
    0000-0000 0000-0000 0000-0000 0000-0101
    ^0000-0000 0000-0000 0000-0000 0000-0011
    --------------------------------------------
    0000-0000 0000-0000 0000-0000 0000-0110
    ^0000-0000 0000-0000 0000-0000 0000-0011
    --------------------------------------------
    0000-0000 0000-0000 0000-0000 0000-0101
    <<(左移):左移几位其实就是该数据乘以2的几次方,可以完成2的次幂运算;
    3 << 2 = 12 -->3*(2*2)=12;
    3 << 3 = 24 -->3*(2*2*2)=24;

    >>(右移):右移几位其实就是除以2的几次幂.对于高位出现的空位,原来高位是什么就用什么去补这个空位(即保证符号位一致(负正数),负数的二进制值中最高位是1);
    6 >> 1 = 3 -->6/2=3;
    6 >> 2 = 1 -->6/(2*2)=1(二进制中小数位将舍弃);

    >>>(无符号右移):数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补,即无符号右移完后的值都是非负数;
     
  • 相关阅读:
    开源IDS系列--解决barnyard2 停止运行 libmysqlclient.so.16.0.0
    开源IDS系列--snorby 2.6.2 undefined method `run_daily_report' for Event:Class (NoMethodError)
    开源IDS系列--snorby 进程正常,但是worker无法启动 The Snorby worker is not currently running
    大数据之路:阿里巴巴大数据实践小记
    LRU算法的应用
    Bitmap的巧用
    impala和presto
    常用sql
    wget rpm yum
    WSGI uwsgi uWSGI
  • 原文地址:https://www.cnblogs.com/lisu/p/yx.html
Copyright © 2020-2023  润新知