• Java运算符


    算术运算符

     

     

    赋值运算符

    运算符

    运算

    范例

    结果

    =

    赋值

    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

    a+=b 可以想象成 a=a+b;

    变量声明完了之后,可以使用赋值语句(assignment statement)给变量赋一个值,Java中使用等号(=)作为基本的赋值运算符(assignment operator),

    格式如下:

    variable = expression;

    变量    =  表达式;

    变量我们已经知道如何声明,表达式具体如何定义?

    表达式的定义:

    表达式涉及到值(常量),变量和通过运算符计算出的值,以及他们组合在一起计算出的新值。

    x =y+1;

     

    比较运算符

    如何比较两个值?使用比较运算符 3和5谁大,在java中如何比较?

    比较运算符比较的两边操作数,结果都是boolean的,只有true和false两种结果。

    运算符

    运算

    例子

    结果

    ==

    相等于

    4= =3

    false

    !=

    不等于

    4!= 3

    true

    小于

    4 < 3

    flase

    大于

     4>3

    true

    <=

    小于等于

    4<=3

    false

    >=

    大于等于

    4>=3

    true

    Instanceof

    检查是否是类的对象

    "hello"instanceof String

    true

    注意的细节:

        1.使用比较运算符的时候,要求两种数据类型必须一致。

           byte、short、char 会自动提升至int。

    逻辑运算符

    什么是逻辑运算符?连接比较运算符的符号称之为逻辑运算符。那么为什么要连接比较运算符? 举例:当你去公司应聘,招聘要求,男性(判断为真),并且开发经验1年(判断为假)那么,我们还适合去面试吗,不能,因为只满足了一项,总体是不满足的(总体结果为假)。

    逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。我们的比较运算符只能进行一次判断,对于对此判断无能为力,那么逻辑运算符就可以经将较运算符连接起来。

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

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

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

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

    & 与   | 或   ^ 异或 ! 非

    1&

    true & true = true ;

      false & true= false;

      true & false = false;

      false & false= false;

      总结 & 符号特点

    & : 只要两边的boolean 表达式结果,有一个false.那么结果就是false

    只有两边都为true ,将结果为true.

    2|

    true   |  true   =true;

     ture   |  false =true;

     false  |  true  =true;

     false  |  false =flase;

     

    总结 | : 两边只要有一个为真结果就为真,当两边同为假时结果才为假.

    3异或

    true  ^  true =false;

      ture  ^  false =true;

      false  ^  true= true;

      false  ^  false=flase;

     

    ^ : 两边相同结果是false

    两边不同结果是true;

    4!

    !true = false

    !false= true

     

    5&&  短路

    研究发现,&运算只有两边全为真的时候,结果才为真,那么当左边为假的时候就没有必要在进行判断,&&就产生了。

    int a =4;

    a >3 && a< 6;

    a >3 & a< 6 ;

    在这种情况下世没有区别的

    如果:

    a =2

    a >3 & a< 6    2大于 3 为假, 接着运算 2 小于6 为真,总的结果为假

    a >3 && a< 6;   此时a 不大于3 结果为false 右边不运算了.即短路.所以&& 比& 效率稍微高了一点.

    public static void main(String[] args) {

           int x = 0;

           int y = 1;

           if (x == 0 && y == 1) {

               System.out.println(x + y);

           }

        }

     

    1.1   位运算符

    按位操作符用来操作整数基本数据类型中的单个比特(bit),就是二进制,按位操作符会对两个参数中对应的位(bit)执行布尔运算,最终生成一个结果。按位操作符来源于C语言面向底层的操作,Java设计的初衷是嵌入式电视机机顶盒,所以面向底层的操作也保留了下来。

    任何信息在计算机中都是以二进制的形式保存的,”&”、“|”、“^”除了可以作为逻辑运算符也可以作为位运算符。位运算是直接对二进制进行运算。他们对两个操作数中的每一个二进制位都进行运算。例如int是由32个二进制数组成,因此使用位运算符可以对整数值的二进制数进行运算。

    位(bit)运算符:

    位运算符

     

    运算符含义

     

    &

    与(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

    1、 ~ 反码

    就是取反,二进制只有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。

    4、负数表示

    负数对应的正数的二进制-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

    5、异或特点

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

    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

    除了这些位运算操作,还可以对数据按二进制位进行移位操作,Java的移位运算符有三种。

     

    移位操作符

    << 左移

    >> 右移

    >>> 无符号右移

    位运算符

    运算符

    运算

    范例

    << 

    左移

    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:表达式2;

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

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

    运算符的优先级与结合性

  • 相关阅读:
    应用程序调试技术视频观看指南
    应用程序调试技术视频各集技术概述
    使用gettext技术为ASP.NET网站实现国际化支持
    反调试技术二
    VC 6中使用不同调用规范的函数在符号文件里的表示方式
    使用allpairs自动设计组合测试用例
    BDD测试演示视频
    bitset学习笔记 & 洛谷 P3674 小清新人渣的本愿(莫队、bitset)
    牛客挑战赛53 B.简单的序列(bitset,哥德巴赫猜想)
    P6775 [NOI2020] 制作菜品(dp,bitset)
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/5262943.html
Copyright © 2020-2023  润新知