发表于: 2017-02-24 21:15:00

1 1958


今天完成的事情:

学习Java编程中的运算符(赋值、算术、逻辑、位运算符、扩展运算符)


明天计划的事情:

了解二进制补码;

学习运算符(字符串连接、三元运算符、优先级问题)


遇到的问题:

为什么对int类型的8按位取反输出的值为-9?

答:int类型占存储空间4字节,为32位。所以整数8的完整二进制数应该是:

0000 0000 0000 0000 0000 0000 0000 1000

按位取反以后变为:

1111 1111 1111 1111 1111 1111 1111 0111

因为二进制默认是有符号型的整数,其最高位的1代表负号,我们知道二进制负数表示为数值位取反再加1(也就是补码),依照这个,对于上面的二进制数减1再取反,第一位是符号位保持不变,得到其原码:

1000 0000 0000 0000 0000 0000 0000 1001

所以输出值为-9.


收获:

1) 赋值运算符 =

    int a = 3; //表示将整数3赋值给整型变量a

2) 算数运算符

    +,-,*,/,%(取余数) , ++, --

    二元运算符:+,-,*,/,%

    一元运算符:++, --   

    二元运算符类型提升:

    整数运算

    如果两个操作数有一个为long,则结果也为long;

    没有long时,结果为int,即使操作数全为short,byte,结果也是int。

    浮点运算

    如果两个操作数有一个double, 则结果为double;

    只有两个操作数都是float, 则结果才为float.

    一元运算符(++,--)

    ++为自增符号

     区别:  ++a 先自增再赋值; a++先赋值再自增

3) 逻辑运算符

    逻辑与: && (二元运算符)

    逻辑或: || (二元运算符)

    逻辑非: ! (一元运算符)

    逻辑与和逻辑或采用的是短路的方式。

短路就是知道左侧的表达式就能确定最后的运算结果,则不再计算右侧的表达式。这好比物理中的电流,当某处短路时,电流直接从一条路通过,则不再管另一条路。

上图中,boolean变量运算到a=1>2已经是false了,在逻辑与&&运算中,已经确定了最终的输出值,所以后面的2>(3/0)就不再计算,从而没有报错异常Exception. (短路求值)

如果把a=1>2改成a=1<2,结果将会怎样呢?

结果又报异常了,说明a=1<2之后,计算机又进行了&&右面的计算。


4) 位运算符

     ~ 取反 (一元运算符)

     & 按位与  (二元运算符)

     | 按位或   (二元运算符)

     ^ 按位异或   (二元运算符)

另一种表述方法:

         

      << 左移运算符 (左移1位相当于乘以2)

      >> 右移运算符 (右移1位相当于除以2再取商)


5) 扩展运算符


返回列表 返回列表
评论

    分享到