zoukankan      html  css  js  c++  java
  • 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补,即无符号右移完后的值都是非负数;
     
  • 相关阅读:
    part11-1 Python图形界面编程(Python GUI库介绍、Tkinter 组件介绍、布局管理器、事件处理)
    part10-3 Python常见模块(正则表达式)
    Cyclic Nacklace HDU
    模拟题 Right turn SCU
    状态DP Doing Homework HDU
    Dp Milking Time POJ
    区间DP Treats for the Cows POJ
    DP Help Jimmy POJ
    Dales and Hills Gym
    Kids and Prizes Gym
  • 原文地址:https://www.cnblogs.com/lisu/p/yx.html
Copyright © 2011-2022 走看看