发表于: 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) 扩展运算符
评论