1.表达式:
表达式就是符号(如加号、减号)与操作数(如 b,3 等)的组合
运算符按照其要求的操作数数目来分,可以有单目运算符、双目运算符和三目运算符,它们分别对应于 1 个、2 个、3 个操作数。
单目:+(取正)-(取负) ++(自增) - -(自减)
双目:+ - * / %(取余)
三目:a>b?true:false 说明:当 a 大于 b 的时候,为 true(也就是冒号之前的值),否则为 false;
运算符按其功能来分,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和其他运算符。
2.赋值运算符 = //特别要注意的是,不是表示等于,表示等于用==
变量名 = 表达式; //将右边的值给左边的变量
3.算术运算符 +,-,*,/,%
int int1 = 99;
int int2 = 25;
prt.println("int1 + int2 = " + (int1 + int2));
prt.println("int1 - int2 = " + (int1 - int2));
prt.println("int1 * int2 = " + (int1 * int2));
prt.println("int1 / int2 = " + (int1 / int2));
prt.println("int1 % int2 = " + (int1 % int2));
4.关系运算符 >, < ,>=,<=,==,!=
// 关系运算符
int a = 50;
int b = 60;
prt.println("a = " + a);
prt.println("b = " + b);
prt.println("a > b : " + (a > b));
prt.println("a >= b : " + (a >= b));
prt.println("a == b : " + (a == b));
prt.println("a != b : " + (a != b));
prt.println("a < b : " + (a < b));
prt.println("a <= b : " + (a <= b));
5.逻辑运算符 &&,||,!
// 逻辑运算
boolean bn1 = true;
boolean bn2 = false;
prt.println("bn1 && bn2 :" + (bn1 && bn2));
prt.println("bn1 || bn2 :" + (bn1 || bn2));
prt.println("!bn1 :" + !bn1);
逻辑运算符用于连接布尔型表达式,
在 Java 中不可以写成 33 && x<6 。
短路逻辑运算符
当使用与逻辑运算符时,在两个操作数都为 true 时,结果才为 true,但是当得到第一个操作为 false 时,其结果就必定是 false,这时候就不会再判断第二个操作了。
当使用或逻辑运算符时,两个操作数,当第一个已经是 true 时,就不会再判断第二个了。
6.三目运算符 ?:
// 三目运算符
int i = 5, j = 9;
int result = i > j ? i : j; // ?号前面的表达式为真取 i,否则取 j
prt.println("result : " + result);
这整个运算符包括一个关系运算符(可以是“>”"<""!="等等),一个“?”,一个“:”,冒号前后需要有两个表达式或者是值或者是对象。
7.字符串连接符 + 用于拼接字符串
//String
String address1 = "Anhui";
String address2 = "Hefei";
int code = 5;
String ret = address1 +" "+ address2 +" "+ code+" 号";
prt.println("ret :" + ret);
8.数据类型转换操作符 () 用于转换数据类型
//类型转换
int num = 1000;
short shot;
shot = (short) num;
prt.println("shot : " + shot);
9.递增递减运算符 ++, --
//递增递减运算符
int age = 6;
prt.println("age = " + age);
age++; //先使用后 ++
prt.println("age++: " + age);
age--; //先使用再递减
prt.println("age--: " + age);
++age; //先自增再使用
prt.println("++age: " + age);
--age; //先递减再使用
prt.println("--age: " + age);
10.逗号操作符
11.扩展赋值运算符 +=,-=,/=,*=,%=
//int1 +=int2;
prt.println("--------------------------------");
prt.println("int1 +=int2 :" + (int1 +=int2));
prt.println("int1 -=int2 :" + (int1 -=int2));
prt.println("int1 *=int2 :" + (int1 *=int2));
prt.println("int1 /=int2 :" + (int1 /=int2));
prt.println("int1 %=int2 :" + (int1 %=int2));
a+=b 等价于 a=a+b
12.位操作符/移位操作符
Java 定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
位运算符作用在所有的位上,并且按位运算。假设 a = 60,b = 13;它们的二进制格式表示将如下:
A = 0011 1100 B = 0000 1101 ----------------- A&b = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~A = 1100 0011
| 操作符 | 描述 | 例子 |
| & | 如果相对应位都是 1,则结果为 1,否则为 0 | (A&B),得到 12,即 0000 1100 |
| | | 如果相对应位都是 0,则结果为 0,否则为 1 | (A | B)得到 61,即 0011 1101 |
| ^ | 如果相对应位值相同,则结果为 0,否则为 1 | (A ^ B)得到 49,即 0011 0001 |
| 〜 | 按位补运算符翻转操作数的每一位,即 0 变成 1,1 变成 0。 | (〜A)得到-61,即 1100 0011 |
| << | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2 得到 240,即 1111 0000 |
| >> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2 得到 15 即 1111 |
| >>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2 得到 15 即 0000 1111 |
>> :若符号位为正,则在最高位插入 0;若符号位为负,则在最高位插入 1
>>> :无论正负,都在最高位插入 0
14.基本数据类型和和其对应的引用类型的包装类
int ---- Integer
char ---- Character
byte ---- Byte
short ---- Short
long ---- Long
float ---- Float
double ---- Double
boolean ---- Boolean
规律总结:
A.除了 int 和 char 外,基本类型的首字母大写就是其对应的引用类型的包装类;
B.基本数据类型和其包装类之间,可以自动实现装箱和拆箱操作;
15.数据类型之间的转换,比如:String 类型和 Integer 类型之间的转换思路:
A.可以先查看 String 类有没有提供转换为目标类型的方法,有则使用;
B.String 类型若没有,检查目标类型有没有提供从 String 类型转换为自己的类型!
16.Java 运算符优先级:
| 序列号 | 符号 | 名称 | 结合性(与操作数) | 目数 | 说明 |
| 1 | . | 点 | 从左到右 | 双目 |
|
| ( ) | 圆括号 | 从左到右 |
|
|
| [ ] | 方括号 | 从左到右 |
|
|
| 2 | + | 正号 | 从右到左 | 单目 |
|
| - | 负号 | 从右到左 | 单目 |
|
| ++ | 自增 | 从右到左 | 单目 | 前缀增,后缀增 |
| - - | 自减 | 从右到左 | 前缀减,后缀减 |
| ~ | 按位非 | 从右到左 | 单目 |
|
| ! | 逻辑非 | 从右到左 | 单目 | “!”不可以与“=”联用 |
| 3 | * | 乘 | 从左到右 | 双目 |
|
| / | 除 | 从左到右 | 双目 | 整数除法:取商的整数部分,小数部分去掉,不四舍五入 |
| % | 取余 | 从左到右 | 双目 |
|
| 4 | + | 加 | 从左到右 | 双目 |
|
| - | 减 | 从左到右 | 双目 |
|
| 5 | << | 左移位运算符 | 从左到右 | 双目 |
|
| >> | 带符号右移位运算符 | 从左到右 | 双目 |
|
| >>> | 无符号右移 | 从左到右 | 双目 |
|
| 6 | < | 小于 | 从左到右 | 双目 | |
| <= | 小于或等于 | 从左到右 | 双目 |
|
| > | 大于 | 从左到右 | 双目 |
|
| >= | 大于或等于 | 从左到右 | 双目 |
|
| instanceof | 确定某对象是否属于指定的类 | 从左到右 | 双目 |
|
| 7 | == | 等于 | 从左到右 | 双目 | |
| != | 不等于 | 从左到右 | 双目 |
|
| 8 | & | 按位与 | 从左到右 | 双目 |
|
| 9 | | | 按位或 | 从左到右 | 双目 |
|
| 10 | ^ | 按位异或 | 从左到右 | 双目 |
|
| 11 | && | 短路与 | 从左到右 | 双目 |
|
| 12 | || | 短路或 | 从左到右 | 双目 |
|
| 13 | ? : | 条件运算符 | 从右到左 | 三目 |
|
| 14 | = | 赋值运算符 | 从右到左 | 双目 |
|
| += | 混合赋值运算符 |
|
| -= |
|
| *= |
|
| /= |
|
| %= |
|
| &= |
|
| |= |
|
| ^= |
|
| <<= |
|
| >>= |
|
| >>>= |
|
其他知识:
一. 机器数和真值
在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.
1、机器数
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为 0, 负数为 1.
比如,十进制中的数 +3 ,计算机字长为 8 位,转换成二进制就是 00000011。如果是 -3 ,就是 10000011 。
那么,这里的 00000011 和 10000011 就是机器数。
2、真值
因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位 1 代表负,其真正数值是 -3 而不是形式值 131(10000011 转换成十进制等于 131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
例:0000 0001 的真值 = +000 0001 = +1,1000 0001 的真值 = –000 0001 = –1
二. 原码, 反码, 补码的基础概念和计算方法.
在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式.
1. 原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是 8 位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以 8 位二进制数的取值范围就是:
[1111 1111 , 0111 1111]
即
[-127 , 127]
原码是人脑最容易理解和计算的表示方式.
2. 反码
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.
3. 补码
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后 +1. (即在反码的基础上 +1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.
参考链接:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于