五、运算符
1.运算符分类
算数运算符、关系运算符、赋值运算符、逻辑运算符、条件运算符、位运算符
1.1算术运算符
运算符 | 含义 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余,求模 |
++ | 自增,对原值加1 |
– | 自减,对原值减1 |
-
前缀自增自减
先进行自增或自减,然后在执行表达式
-
后缀自增自减
先执行表达式,然后再进行自增或自减
/*
* 基本用法
*/
int a = 5;
int b = 2;
// int sum=a+b;
// System.out.println("a+b="+sum);
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b);
System.out.println(a % b);
System.out.println("--------------------------");
/*
* 自增自减
*/
int c = 6;
// c++;
// ++c;
// c--;
--c;
System.out.println(c);
/*
* 前缀自增自减和后缀自增自减的区别
*/
int x = 3;
// System.out.println(++x); //先加1,在输出
System.out.println(x++);// 先输出,在加1
int m = 5;
// int n=m--;
int n = --m;
System.out.println(n);```
// 思考?
int i = 3;
int j = (i++) + (++i);// 3+5
System.out.println(j);
/*
* 将字符串与数值相加时会进行拼接
*/
System.out.println("hello" + 22 + 11);// hello2211
System.out.println("hello" + (22 + 11));// hello33
int d = 3, e = 8;
System.out.println("" + d + e);// 借助空字符串将数字拼接
1.2关系运算符
也称为比较运算符,用来做比较运算,比较结果是boolean类型
运算符 | 含义 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
int a = 5, b = 8;
System.out.println(a > b);//结果为boolean值
System.out.println(a < b);
System.out.println(a >= b);
System.out.println(a <= b);
System.out.println(a == b);
System.out.println(a != b);
// System.out.println(1<5<8);//不支持此写法
System.out.println('x' > 'm');// 可以用于字符的比较,比较的是字符的ASCII码
1.3赋值运
运算符 | 含义 |
---|---|
= | 简单赋值 |
+= | 加法赋值 |
-= | 减法赋值 |
*= | 乘法赋值 |
/= | 除法赋值 |
%= | 求模赋值 |
int a = 5;
// a+=2;//等价于a=a+2
// a-=2;//等价于a=a-2
// a*=2;//等价于a=a*2
// a/=2;//等价于a=a/2
a %= 2;// 等价于a=a%2
System.out.println(a);
// int b=c=6;//不支持此写法
1.4逻辑运算符
运算符 | 含义 |
---|---|
&& | 逻辑与,并且 |
|| | 逻辑或,或者 |
! | 逻辑非,取反 |
boolean a = true, b = false;
System.out.println(a && b);// 两个都是true,则为true,否则为false
System.out.println(a || b);// 只要有一个为true,则为true,否则为false
System.out.println(!b);// 如果为true,则为false,如果为false则为true
System.out.println(5 > 2 && 8 <= 6);
System.out.println(16 > (4 + 2) * 3);
System.out.println(!(5 > 8));
/*
* 逻辑运算是一种短路运算
*对于&&如果左边为false,则不再执行右边代码
*对于||如果左边为true,则不再执行右边代码
*/
System.out.println(false && (5 + 2) * 3 > 15);
// System.out.println(5/0);//除数不能为0
System.out.println(false && 5 / 0 > 3);// 不在执行5/0
1.5条件运算符
也称为三目运算符
语法:条件?表达式1:表达式2
当条件为true时执行表达式1,当条件为false时执行表达式2
int a = 5, b = 9;
System.out.println(a * 2 > b ? "yes" : "no");
int c = a > b ? a + b : a - b;
System.out.println(c);
1.6运算符的优先级
从高到低的顺序:
- 小括号()
- 一元运算:自增++、自减–、非!
- 乘*、除/、取余%
- 加+、减-
- 关系运算:> 、<、 >=、 <=
- 相等运算:==、!=
- 逻辑与:&&
- 逻辑或:||
- 赋值运算:=、+=等
注:当运算符较多时,建议使用小括号控制运算的顺序
2.进制
2.1简介
进制就是进位计数制,是一种带进位的计数方法,即逢几进一
生活中的进制:十进制、七进制、十二进制、二十四进制、六十进制、二进制、十六进制
2.2常用进制
进制种类 | 单词 | 范围 | 引导符号 | 示例 |
---|---|---|---|---|
十进制 | decimal | 由0-9组成,共十个,逢十进一 | 无,Java整数中默认十进制 | 10 |
二进制 | binary | 由0-1组成,共两个,逢二进一 | 0b或0B | 0b10 |
八进制 | octonary | 由0-7组成,共八个,逢八进一 | 0 | 010 |
十六进制 | hex | 由0-9,a-f或A-F组成,共16个,逢十六进一 | 0x或0X | 0x10 |
2.3进制转换
十进制转换为其他进制:除基取余
如23——>0b10111 ——>0x17
其他进制转换为十进制:按权相加
如0b10111——>1×20+1×21+1×22+0×23+1×2^4=23
0x12——>2×160+1×161=18
2.4二进制
计算机底层使用的是二进制,所有数据在计算机底层都是以二进制形式保存的
二进制数分为两种:
-
无符号二进制,只能存储正整数
-
有符号二进制,可以存储正数和负数,最高位为符号位,0表示正数,1表示负数
正数5表示为
00000000 00000000 00000000 00000101
负数5表示为
10000000 00000000 00000000 00000101
二进制中的原码、补码、反码
-
原码
原始二进制值
-
反码
正数:反码和原码相同,如5的反码
00000000 00000000 00000000 00000101
负数:符号位不变,其余2各位取反,如-5的反码
11111111 11111111 11111111 11111010
-
补码
正数:补码和原码相同,如5的补码
00000000 00000000 00000000 00000101
补码
正数:补码和原码相同,如5的补码
00000000 00000000 00000000 00000101
负数:反码+1,如-5的补码
11111111 11111111 11111111 11111011
总结:
- 对于正数,原码、反码、补码都相同
- 对于负数有所不同
计算机内部是使用补码来存储和表示值的
-
2.5位运算符
主要是针对二进制的位进行运算,需要将值转换为二进制后进行按位运算
运算符 | 含义 |
---|---|
& | 按位与 |
| | 按位或 |
~ | 按位非 |
^ | 异或 |
>> | 右移 |
<< | 左移 |
>>> | 无符号右移(了解) |
位运算符和逻辑运算符的区别:
- 逻辑运算符是针对布尔值进行运算
- 位运算符是针对二进制的位进行运算