zoukankan      html  css  js  c++  java
  • java编程基础(二)java中的运算符

    Java编程基础(二)

    2.1.1 算术运算符:

         Java中的算术运算符就是处理四则运算的符号,这是最简单,最常用的运算符号。

         

     注意:

         在进行自增++和自减—运算时,要注意++和—的位置,如果++号或—号放在操作数的前面,要先进行自增或自减运算;如果它在操作数的后面,就要先进行其他运算,再进行自增或自减运算。

         在进行除法运算时,如果除数和被除数都为整数,得到的结果会忽略小数点后面的小数得到一个整数,如果除法中有小数参与运算,那么得到的结果会是一个小数。

         进行取余运算时,取余的正负取决与被除数,例如:

      

    2.1.2 赋值运输符

     = , +=, -=, *=, /=, %=

    运算符

    运算

    范例

    结果

    =

    赋值

    a=3,b=2

    a=3,b=2

    +=

    加等于

    a=3,b=3;a+=b;

    a=5,b=2;

    -=

    减等于

    a=3,b=2,a-=b;

    a=1,b=2;

    *=

    乘等于

    a=3,b=2,a*=b;

    a=6,b=2

    /=

    除等于

    a=3,b=2,a/=b;

    a=1,b=2;

    %=

    模等于

    a=3,b=2,a%=b;

    a=1,b=2

    赋值运算符:把变量或表达式的值赋给某一个变量

    注意:

    1. 在java中可以通过一条语句对多个变量进行负责,例如:

    Int x.y,z;

    X=y=z=5;

    特别注意:下面的语法在java中行不通

    Int x=y=z=5;    在一条语句中不能对多个变量同时定义同时赋值,一次只能对同一个变量同时定义,同时赋值。

    1. 在使用赋值运算符进行赋值时,即使两个操作数不满足进行自动类型转换的条件,也不需要进行显示声明,强制类型转换自动完成。

    例如:

    2.1.3 比较运算符

    运算符

    运算

    例子

    结果

    ==

    相等于

    4= =3

    false

    !=

    不等于

    4!= 3

    true

    小于

    4 < 3

    flase

    大于

     4>3

    true

    <=

    小于等于

    4<=3

    false

    >=

    大于等于

    4>=3

    true

    Instanceof

    检查是否是类的对象

    "hello"instanceof String

    true

    比较运算符用于对两个数值或变量进行比较,得到的结果是一个布尔值。

    注意:

    不能将比较运算符==写成赋值运算符=。

    2.1.4 逻辑运算符

    逻辑运算符用于对布尔型的数据进行操作,其结果仍然是布尔类型的值。

    逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。

    “&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。

    “|”和“||”的区别同理,双或时,左边为真右边不参与运算。

    “ ^ ”异或与“|”或的不同之处是:当左右都为true时,结果为false。

    总而言之,使用短路&&(||)的运行效率要稍大于&(|);

    2.1.5 位运算符:

        位运算符是针对二进制数的每一位进行运算的符号,它是专门针对数字0和1进行运算。

       两个数值进行位运算,就是用数值的二进制形式进行运算。

    位运算符

     

    运算符含义

     

    &

    与(AND)

    |

    或(OR)

    ^

    异或

    ~

    取反

    规则:

    可以把1当做true 0当做false

    只有参与运算的两位都为1,&运算的结果才为1,否则就为0。

    只有参加运算的两位都是0,| 运算的结果才是0,否则都是1。

    只有参加运算的两位不同,^ 运算的结果才为1,否则就为0。

    1& 与运算

    & 参见运算的两位数都为1,&运算符结果才为1,否则就为0。

    6&3

    00000000

    00000000

    00000000

    00000110

    6

    00000000

    00000000

    00000000

    00000011

    3

    00000000

    00000000

    00000000

    00000010

    &  =2

    2| 或运算

    | 参与运算的两位都为0,|运算的结果才为0,否则就为1。

    00000000

    00000000

    00000000

    00000110

    6

    00000000

    00000000

    00000000

    00000011

    3

    00000000

    00000000

    00000000

    00000111

    |  =7

    3^ 异或运算

    ^只有参加运算的两位不同,^运算的结果才为1,否则就为0。

    00000000

    00000000

    00000000

    00000110

    6

    00000000

    00000000

    00000000

    00000011

    3

    00000000

    00000000

    00000000

    00000101

    ^  =5

    4~ 反码

    就是取反,二进制只有1和0,取反就是如果为1,取反就是0,如果是0,取反就是1。

    0000-0000

    0000-0000

    0000-0000

    0000-0110

    6

    1111-1111

    1111-1111

    1111-1111

    1111-1001

    取反 -7

    System.out.println(~6);//-7

    结论:当参与取反的数值是正数时,把对应的值加上负号,再-1;

          当参与取反的数值是负数时,把对应的值加上负号,再-1;

    负数的表现形式就是对应的正数取反,再加1。负数的最高位肯定是1。

    5、负数表示

    负数对应的正数的二进制-1,然后取反。

    -6

    0000-0000

    0000-0000

    0000-0000

    0000-0110

    6

    1111-1111

    1111-1111

    1111-1111

    1111-1001

    取反

    1111-1111

    1111-1111

    1111-1111

    1111-1010

    加1

    6、异或特点

    一个数异或同一个数两次,结果还是那个数.  用处一个简单的加密思想.

    6^3^3

    0000-0000

    0000-0000

    0000-0000

    0000-0110

    6

    0000-0000

    0000-0000

    0000-0000

    0000-0011

    ^3

    0000-0000

    0000-0000

    0000-0000

    0000-0101

    0000-0000

    0000-0000

    0000-0000

    0000-0011

    ^3

    0000-0000

    0000-0000

    0000-0000

    0000-0110

    结果是6

    异或除了用来对数据进行加密,还可以用于交换两个变量。

    下面介绍交换变量的3种方法。

    1. 定义第3方变量(缺点:需要定义第3方变量)

     

    2. 使用两个数相加的方法(缺点:两数相加可能会超过数据类型可以表示数值的范围)

     

    3. 使用异或(缺点:逻辑不清晰)

     

    2.1.6 移位运算符

    << 左移

    >> 右移

    >>> 无符号右移

    位运算符

    运算符

    运算

    范例

    << 

    左移

    3 << 2 = 12 --> 3*2*2=12

    >> 

    右移

    3 >> 1 = 1 --> 3/2=1

    >>> 

    无符号右移:

    3 >>> 1 = 1 --> 3/2=1

    &

    与运算

    6 & 3 = 2

    |

    或运算

    6 | 3 = 7

    ^

    异或运算

    6 ^ 3 = 5

    ~

    反码

    ~6 = -7

    位运算符的细节

    << 

    空位补0,被移除的高位丢弃,空缺位补0。

    >> 

    被移位的二进制最高位是0,右移后,空缺位补0;

    最高位是1,空缺位补1。

    >>> 

    被移位二进制最高位无论是0或者是1,空缺位都用0补。

    &

    二进制位进行&运算,只有1&1时结果是1,否则是0;

    |

    二进制位进行 | 运算,只有0 | 0时结果是0,否则是1;

    ^

    任何相同二进制位进行 ^ 运算,结果是0;1^1=0 , 0^0=0

    不相同二进制位 ^ 运算结果是1。1^0=1 , 0^1=1

    技巧:可以理解为二进制1就是true,0就是false。

    案例:

    1、左移(算术移位)

    3<< 2 是如何在计算机里是实现的?

    首先将3转换为2进制,

    00000000

    00000000

    00000000

    00000011

    3 的二进制

    00000000

    00000000

    00000000

    000011

    左移2位,砍掉高位

    0000 0000

    0000 0000

    0000 0000

    0000 1100

    低位补0

                 

    结果是12,所以3<<2 =12;

    结论:左移就相当于乘以2的位移个数次幂.

    2、右移

    6>>2

    00000000

    00000000

    00000000

    00000110

    6的二进制

    000000

    00000000

    00000000

    00000001

    右移10被砍掉

    00000000

    00000000

    00000000

    00000001

    高位补0

                 

    结果是1,所以6>>2 =1;

    结论一个数往左移越移越大,往右边移越来越小.

    推论

    3<<2=12;  3<<1=6 ;  3<<3=24;

    3*4=12 ;  3*2=6;    3*8=24;

    3*22=12;   3*21=6    3*23 =24;

    结论往左移几位就是乘以2的几次幂。

    右移规律

    6>>2=1  ;6>>1=3 ;

    6/4=1   ; 6/2=3 ;

    右移两位就是除以 2的2次方,右移一位就是除以 2的一次方。

    总结 :>> 是除以2的移动位数次幂

         << 是乘以2的移动位数次幂

    用处:最快的运算是位运算。

     

    练习:最有效率的方式算出2乘以8等于几?

     

    3、无符号右移(逻辑移位)

    通过演示发现右移时高位就空了出来, >> 右移时高位补什么要按照原有 数据的最高位来决定。

    1111-1111 1111-1111 1111-1111 1111-1010    -6>>2

    1111-1111 1111-1111 1111-1111 1111-0010   

     最高位补什么要看原有最高位是什么

    那么使用>> 后原来是最高位1 的那么空出来的最高位还是1 的,是0的还是0。

    如果使用>>> 无论最高位是0还是1 空余最高位都拿0 补,这就是无符号右移。

    1111-1111 1111-1111 1111-1111 1111-1010    -6>>>2

    001111-1111 1111-1111 1111-1111 1111-10   

    结果是;1073741822

    2.1.7 三元运算符

    格式

    (条件表达式)?表达式1:表达式2;

    如果条件为true,运算后的结果是表达式1;

    如果条件为false,运算后的结果是表达式2;

    示例:

    1获取两个数中大数。

    int x=3,y=4,z;

    z = (x>y)?x:y;//z变量存储的就是两个数的大数。

    int x = 1;

           int y = 2;

           int z;

           z = x > y ? x : y;

           System.out.println(z); //2

    2判断一个数是奇数还是偶数。

    int x=5;

    System.out.println((x%2==0?"偶数":"奇数"));

    结论:三元运算符和if-else语句比较类似,不同的是三元运算符用于给一个变量赋值,而if-else的处理不定。

    2.1.8 运算符的优先级

     

     从上到下,优先级依次降低,优先级高的先运算,同级的按照结合性(从左到右或从右到左)运算。为避免出错,一般先运算的加括号括起来。

  • 相关阅读:
    kafka 启动失败
    spring boot 集成 hbase
    Spring Boot Restful 乱码
    自动化工具selenium
    spring boot mssqlserver
    pyqt5
    python bytes to string
    jQuery获取Select选择的Text和 Value(转)
    第二周读书笔记《构建之法》
    第三周读书笔记《程序员修炼之道》
  • 原文地址:https://www.cnblogs.com/ithome0222/p/7783516.html
Copyright © 2011-2022 走看看