zoukankan      html  css  js  c++  java
  • 位运算

      3.运算符
                赋值运算符:=,+=,-=,*=,/=,%=
                变量=表达式
                将表达式结果赋给左边的变量
     
                +=
                x += 5;等同于    x = x+5;
                x *= 2+3;等同于    x = x*(2+3);
     
     
            算术运算符:+,-,*,/,++,--,%,?:
            10/2      5
            10/3      3
            10/6      1
            10/6.0    1.6666666667
     
            %:求余数
            10%5    0
            10%3    1
            3%5        3
            3.0%1    出错,小数不能参与模运算
            已经2016-3-8周三,再过15天,是周几?
            有一个两位数整数,取出个位数是几?
            xy%10
            10%10   0
            15%10    5
            98%10    8
            x是不是y的倍数
            x%y==0
            前置 后置
            ++x   x++        x = x+1
            --x   x--
     
            复合运算
                y = x++;    前提x=5, 计算后y=5, x=6
                y = ++x;    前提x=5, 计算后y=6, x=6
     
                System.out.print(x++);
                System.out.print(x);前提x=5,输出5,6
     
                System.out.print(++x);
                System.out.print(x);前提x=5,输出6,6
     
                System.out.print(x+1);前提x=5,输出6
                System.out.print(x++);前提x=5,输出5
     
            ?:条件运算符,三目运算符,多元运算符
            条件?真值:假值
     
            z = x>y?x:y;前提x=5,y=6,z的结果6
            x>Y?假
            取y
            赋值
     
            程序中保存性别0,1分别表示男,女
            String s = sex==1?"男":"女";
            System.out.print(s);       
     
            关系运算符:==,>=,<=,!=,>,<
            关系运算符的结果是布尔值。
     
            ==,!=是用于比较两个值是否相等或不等,
            这两个操作可以任意类型,但不保证结果正确。
            如果基本数据类型,结果正确。
            如果是引用类型,比较两个对象的地址是不是同一个。
     
            >,>=,<,<=只能比较基本数据类型的数据,不能用于比较引用型数据类型的数据。
     
     
            逻辑运算符:&&,||,!,&,|
            &&和||,对应and和or,连接多个关系运算,结果还是布尔值。
            a>b && b>c: 
                a>b和b>c同时为true,结果为true,否则为false   
            a>b || b>c: 
                a>b和b>c同时为false,结果为false,否则为true。
     
            !表示取反.
            !(a>b):
                如果a>b为true, 结果为false;
                如果a>b为false, 结果为true。
     
            是不是闰年(year)?
                year%4==0&&year%100!=0 || year%400==0
            是不是平年(year)?
                !(year%4==0&&year%100!=0 || year%400==0)
                或
                (year%4!=0 || year%100==0) && year%400!=0
     
     
            &&与&区别:
                &&运算效率高,短路and,如果左边为false,右边不再计算。
                &运算左右两边无论任何情况下都要计算。
     
                前提:x=5,y=6
                x++>5 && y++>6;
                计算条件结果是false,x=6,y=6
     
     
                前提:x=5,y=6
                x++>5 & y++>6;
                计算条件结果是false,x=6,y=7
     
     
            位运算符:&,|,~,^,>>,<<,>>>
                只对数值计算
                &:按位与
                例如:5&10
                    5的二进制原码    0000 0101
                    10的二进制原码    0000 1010
                    然后每个对应进行与运算,其结果是0
     
                    与:只要同为1,结果为1,否则为0
     
                |:按位或
                    或:只要同为0,结果为0,否则为1
     
                ^:按位异或
                    异或:相同为0,不同1
     
                例如:    8^12结果4               
     
                    0000 1000
                ^    0000 1100
                ------------------
                    0000 0100
     
     
                ~:按位取反
                取反:0变1,1变0
     
                例如:~5结果是250
                    0000 0101
                -----------------
                    1111 1010
     
     
            其它运算符:待续
        赋值运算符:
            =    +=    -=    *=    /=    %=
        算术运算符
           +    -    *    /   ++    --    -    %  ?:
    10/2   5
    10/3   3
    10/3.3 3.33333
     
    10%5     0
    10%3     1
    3%5     3
    3.0%1   出错,小数不能参与模运算
        关系运算符(比较运算符)
            ==    !=    >    >=      <    <=    ===
        逻辑运算符
            &&     ||        !       &        |
        位运算符:
              &   | ~  ^ << >>
        其它运算符
            ()    .    []    new   instanseof
    结合性
         一般情况是从左先右
         从右向左
              -      !      ~      ++      --      -      ?:
    优先级
         一级     (),[]
         二级     !,++,--,-(负号)
         三级     *,/,%
         四级     +,-
         五级     按逻辑运算<<,>>
         六级     <,<=,>,>=
         七级    ==,!=
          8 9 10 级    按位逻辑运算&,^,|
          11级    &&
          12级     ||
          13级     ?:
          14级     =
     
     
     
    public class Weiyunsuan{
      public static void main (String[] args){
        // 1、左移( << )
            // 0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位补0://
            // 0000 0000 0000 0000 0000 0000 0001 0100 换算成10进制为20
            System.out.println(5 << 2);// 运行结果是20
     
            // 2、右移( >> ) 高位补符号位
            // 0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位补0:
            // 0000 0000 0000 0000 0000 0000 0000 0001
            System.out.println(5 >> 2);// 运行结果是1
     
            // 3、无符号右移( >>> ) 高位补0
            // 例如 -5换算成二进制后为:0101 取反加1为1011
            // 1111 1111 1111 1111 1111 1111 1111 1011
            // 我们分别对5进行右移3位、 -5进行右移3位和无符号右移3位:
            System.out.println(5 >> 3);// 结果是0
            System.out.println(-5 >> 3);// 结果是-1
            System.out.println(-5 >>> 3);// 结果是536870911
     
            // 4、位与( & )
            // 位与:第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0
            System.out.println(5 & 3);// 结果为1    0101  0011    0001=1    同1得一,否则为0
            System.out.println(4 & 1);// 结果为0    0100  0001  0000=0
     
            // 5、位或( | )
            // 第一个操作数的的第n位于第二个操作数的第n位 只要有一个是1,那么结果的第n为也为1,否则为0
            System.out.println(5 | 3);// 结果为7    0101  0011    0111=7  有一个1结果是一,否则为0
     
            // 6、位异或( ^ )
            // 第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0
             System.out.println(5 ^ 3);//结果为6
     
            // 7、位非( ~ )
            // 操作数的第n位为1,那么结果的第n位为0,反之。
            System.out.println(~5);// 结果为-6
     
    Scanner input = new Scanner (System.in);
            System.out.print("请输入一个整数,判断基偶数:");
            int num = input.nextInt();
            if((num&1)==1)
            System.out.println("这是一个基数");
            else
            System.out.println("这是一个偶数");
      }
    }
  • 相关阅读:
    ubuntu新的配置
    今天下午鼓捣android-studio的一些经验
    Sublime Text 3
    学Web前端开发,选择培训学校是关键--青岛思途
    让HTML5游戏来的更猛烈些吧!--青岛思途
    Java架构师和开发者实用工具推荐
    Java培训班4个月有用吗?
    Java培训机构如何选择才能避免被骗?
    Java跟JavaScript两者间的关系和区别
    浅谈java中的四个核心概念--思途青岛
  • 原文地址:https://www.cnblogs.com/zachary7/p/8191391.html
Copyright © 2011-2022 走看看