读书笔记——运算符
算术运算符
算术运算符有加减乘除 求余(+、-、*、/、%)
Java在计算算术表达式的值时,使用下列计算机精度规则:
①:如果表达式中有双精度浮点数(double型数据),则按双精度进行运算。
②:如果表达式中最高精度是单精度浮点数(folat型数据),则按单精度进行运算。
③:如果表达式中最高精度是long型整数,则按long精度进行运算。
④:如果表达式中最高精度是int型整数,则按int精度进行运算。
回忆:精度从“低”到“高”的排列顺序是byte、short、char、int、long、float、double。
总结:
位运算符
整型数据在内存中以二进制的形式表示,比如一个int型变量在内存中占4个字节,共32位。int型数据7的二进制表示为:
00000000 00000000 00000000 00000111
左边最高位是符号位,最高位是0表示正数,最高位是1表示负数。
二进制运算时,通常采用补码形式。正整数的补码与原码形式相同,负整数的补码:将这个负整数原码的绝对值的反码加1
int型数据-7的二进制表示:
11111111 11111111 11111111 11111001
①“按位与”运算符:
“按位与”运算符用“&”表示。运算法则是:如果a、b两个数据的对应位都是1,则c的该位是1,否则都是0。
简单点举个例子:
a: 00001110
& b: 00101011
c: 00001010
②“按位或”运算符:
“按位或”运算符用“|”表示。运算法则是:如果a、b两个数据的对应位都是0,则c的该位是0,否则都是1。
a: 00001110
| b: 00101011
c: 00101111
③“按位非”运算符:
“按位非”运算符用“~”表示。运算法则是:如果a的对应位是0,则c的该位是1,如果a的对应位是1,则c的该位是0。
~ a: 00001110
c: 11110001
④“按位异或”运算符:
“按位异或”运算符用“^”表示。运算法则是:如果a、b两个数据的对应位相同,则c的该位是0,否则是1。
a: 00001110
^ b: 00101011
c: 00100101
“按位异或”运算符有几种常见用法(我目前只总结了两种,^…^汗颜^…^):
①利用“按位异或”运算的性质,对字符进行加密
/** * @ClassName: Test.java * @Author: ChiChing * @Version: 2018年6月14日 下午6:55:03 * @Description: **/ public class Test { public static void main(String[] args) { char a='中',b='国',c='人',secret='C'; System.out.println("原文:"+a+b+c); a=(char) (a^secret); b=(char) (b^secret); c=(char) (c^secret); System.out.println("密文:"+a+b+c); } }
②交换变量值,而不使用中间变量
/** * @ClassName: Test.java * @Author: ChiChing * @Version: 2018年6月14日 下午6:55:03 * @Description: **/ public class Test { public static void main(String[] args) { int a=7,b=9; System.out.println("交换前:"+a+"--"+b); a=a^b; b=a^b; a=a^b; System.out.println("交换后:"+a+"--"+b); } }
末尾
其余的运算符就长话短说了,看表:
优先级 |
描述 |
运算符 |
综合性 |
1 |
分隔符 |
[ ]、( )、.、,、; |
|
2 |
对象归类,自增,自减,逻辑非 |
Instanceof、++、--、! |
从右到左 |
3 |
算术乘、除运算 |
*、/、% |
从左到右 |
4 |
算术加、减运算 |
+、- |
从左到右 |
5 |
移位运算 |
>>、<<、>>> |
从左到右 |
6 |
大小关系运算 |
<、<=、>、>= |
从左到右 |
7 |
相等关系运算 |
==、!= |
从左到右 |
8 |
按位与运算 |
& |
从左到右 |
9 |
按位异或运算 |
^ |
从左到右 |
10 |
按位或运算 |
| |
从左到右 |
11 |
逻辑与运算 |
&& |
从左到右 |
12 |
逻辑或运算 |
|| |
从左到右 |
13 |
三目条件运算 |
? : |
从左到右 |
14 |
赋值运算 |
= |
从右到左 |