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

    1.1 概述

    算术运算符

    + - * /

    基本运算

    %

    模(取余数),算整除   n%2结果0就是偶数

    ++     --

    自增    自减

    比较运算符

    结果是boolean值

    ==

    相等比较  1==2 结果是false

    !=

    不等比较  1!=2结果是true

    逻辑运算符

    &&    &  

    结果是boolean值

    逻辑与(短路与),两边同为真结果才为真

    ||       |  

    结果是boolean值

    逻辑或(短路或),两边只要有一个真结果就是真

    +

    字符串连接

    非,非真是假,非假是真

    三元运算符

    ?:

    三项运算

    1 ? 2 : 3

    1是真取2,1是假取3

    赋值运算符

    =

    赋值运算

    +=    -=  

    *=    /=

    复合的赋值运算

    a+=2;//a=a+2

    整数不可以除以0回报异常

    小数可以除以0  如2.0/0 值为Infinity  -2.0/0值为-Infinity Infinity是无穷大的意思

    0.0/0 得到的结果是NAN  翻译过来是NOT A NUMBER

    0/0.0结果也是NAN

    操作%

    最终结果值的正负号与左边的数一致

    -2/-5  值为-2  2/-5 值为2

    ++ 和-- 如果在操作数的后面,先赋值再自加自减 c=a++;

    放在操作数的前面,先自增自减后赋值

    a=2;

    system.out.printf(a++);//2

    a++;//3

    byte c=127;

    c++;//-128 强制类型转换

    ++ -- 在运算的时候会有默认的强制类型转化

     

        byte c=Byte.MAX_VALUE;
        System.out.println(++c); //-128
        short a=Short.MAX_VALUE;
        System.out.println(++a); //-32768
        int b=Integer.MAX_VALUE;
        System.out.println(++b); //-32768
        char d=Character.MAX_VALUE;
        System.out.println((int)++d); //要强转   0

     

     

    byte,short,char 再进行运算的时候会自动提升为Int类型 如下面

    byte a=3;

    a=a+3; //这个会报错           因为a+3结果提升为int类型 ,a是byte 那么类型大转小会报错

    a+=3 //相当于a=a+3 但是此时byte a的结果是对的因为会默认加上强制类型转换

    赋值运算符

    =

    变量没有连等定义

    int a=b=c=3;这个是错的这个只有a是int类型的,其他的b,c不知道类型 

    连等赋值

    a=3;

    int b=a+=a-=a*=5;

    最后b等于-9

    先带入 b=3+=3-=3*=5

    赋值时从右往左走  

    b=3+=3-=15 -->b=3+=-12-->b=-9

     

    int b=a+=a-=a*=a++; 结果是-3   b=3+=3-=3*=3 -->b=3+=3-=9-->b=-3

    int d=a++ + ++a; d等于8   3+5

    变量左边改变的值可以影响到右边的值  而右边改变的值不能影响到左边已经编译好的值   

    扩展形式 +=、-=、*=、/=、%=、&=(按位与等)、|=(按位或等)、^=(按位异或等)、>>=(按位右移等)、<<=(按位左移等)、>>>=(无符号右移等)

     底层默认有强制类型转换。

    比较运算符

    ==、>、<、>=、<=、!=

    逻辑运算符

    用于连接左右两边布尔值或者布尔表达式的符号

    表达式:用于连接数据或者变量而且符合java语法的式子 a+b(算数表达式) a>b(比较表达式)

    &(逻辑与) ,|(逻辑或),^(逻辑异或).!(逻辑非)

    得到的结果是boolan

    &表示并且的关系

    单与&: 表达式1 & 表达式2  结果是true,两个表达式必须都是true

    双与&&: 表达式1 && 表达式2  结果是true的话,两个表达式也都是true

    区别:但是如果&&左边的布尔值是false就默认不执行右边即&&的短路

    -- 短路与,如果表达式1的值是false,结果会造成表达式2的短路

    |表示或者的关系

    单或|:表达式1 | 表达式2 ,最终的结果要true,要求两个中有一个是true就可以

    双或||:表达式1 || 表达式2,最终的结果要true,要求两个中有一个是true就可以

    区别:但是如果||左边的布尔值是true就默认不执行右边即||的短路

    --短路或,如果表达式1的值是true时,表达式2会被短路

    ||在&&的前面,如果||发生了短路就会把&&短路掉

    if(true||(a++!=b)&&(c-->b))   ||右边的都不执行。

    如:

     

    public class HellowWorld {
    public static void main(String[] argv ) {
    int a=1;
    int b=2;
    int c=3;
    if(true&&(a++!=b)||(c-->b))
    {
    	
    }
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
    }
    }
    

     

      结果是:223

    public class HellowWorld {
    public static void main(String[] argv ) {
    int a=1;
    int b=2;
    int c=3;
    if(true||(a++!=b)&&(c-->b))
    {
        
    }
    
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
    }
    }

    结果是1 2 3

     

    ^ 异或相同为false 不同就是true

     

    位运算

    要进行位运算前提是把所有的数据转成二进制数据的补码

    &(按位与)、|(按位或)、^(按位异或)、~(按位取反)、>>(右移)、<<(左移)、>>>(无符号右移

    两边是值的话就是按位与  两边是布尔的话就是逻辑与

    任意一个正数&任意一个数结果是正数

    &:遇0则0

    任意数&1==0 代表的就是偶数 ,&1==1代表的就是奇数

    |:遇1则1,任意一个负数|任意一个数结果为负数 因为符号位是1

    ^:不同为1,相同为0

    异或的扩展:a^b^a 和b^a^a 结果都是b 即一个数按位异或其它数两次得到的结果就是其本身

    ~:先按位取反 正数的补码符号位会变成1 ,那么就是负数的补码 ,那么需要转成原码的值

    如 3的补码是00000000 00000000 00000000 00000011

    按位取反:11111111 11111111 11111111 11111100符号位也要取反

    负数变成反码11111111 11111111 11111111 11111011

    原码 10000000 00000000 00000000 00000100 结果是-4

     

     当左右移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型

    >>(右移) ---右移几位就要补几位,如果是正数,那么右移几位就在最高位(最左边)补几个0,如果是一个负数,右移几位就在最左边补几个1

    都是补码在进行左移右移。

    <<(左移)--无论正负数左移几位就在最右边补几个0

    >>>(无符号右移) ---无论正负数,右移几位就在最左边补几个0

     int类型的值无论左移还是右移几位都是要%32,如右移33位和右移一位是一样的

    byte short char在底层是已int范围来存储的。

    public static void main(String[] argv ) {
    int a=8;
    int c=-8;
    int b=2;
    System.out.println(a>>b); //a右移两位       2
    System.out.println(a<<b);  //a左移两位        32 
    System.out.println(a>>>b); //a无符号右移2位   2
    System.out.println(c>>b); //c右移两位        -2
    System.out.println(c<<b);  //c左移两位        -32 
    System.out.println(c>>>b); //c无符号右移2位   1073741822
    }

     

    三目运算符  (最后一定返回的是一个值)

    表达式(结果一定是布尔值)?表达值1:表达值2

    1.返回值的类型一定要保持一致

    public static void main(String[] argv ) {
    int a=8;
    int c=-8;
    int b=2;
    int max=a<b?(b<c?c:b):(a<c?c:a); //三目嵌套   a<b?b:a 等于知道了b再与c做比较
    System.out.println(max);
    }
    int a=5;
    int b=9;
    int c=2;
    int max=a>b?(a>c?a:c):(b>c?b:c);
    System.out.println(max);

     

  • 相关阅读:
    完美的隐藏软键盘方法
    Android开发——构建自定义组件
    android 中 系统日期时间的获取
    Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面
    总结:调用startActivityForResult,onActivityResult无响应的问题
    Android 頁面中有 EditText ,進入時取消自動彈出鍵盤
    Android中 Bitmap和Drawable相互转换的方法
    ImageView的属性android:scaleType
    动态添加组件(XML)
    Openfire3.8.2在eclipse中Debug方式启动最简单的方式
  • 原文地址:https://www.cnblogs.com/xuwangqi/p/11026726.html
Copyright © 2011-2022 走看看