java运算符
这个社会很单纯,就是手里有技术就能选择生活,而没技术的只能选择生存。当然有人可以做到没技术没学历一样成功,但那都是小部分人。 希望大家和小编一起努力学习。未来能成功的人,他们都有一个共同点,他们很努力!
运算符
知识回顾
上节课我们学到了java的数据类型,我就不过多的说了,画一个流程图让大家回顾吧!!
小编画图技术不高,有些东西想写上 但不知道怎么操作,会学习的 下一次再画流程图一定会非常好看的。这次,,,有点low莫说莫说!!!
类型名 | 包装类 | 所占大小 |
---|---|---|
byte | Byte | 1 |
short | Short | 2 |
int | Integer | 4 |
long | Long | 8 |
char | Character | 2 |
float | Float | 4 |
double | Double | 8 |
boolean | Boolean | 没有规定明确大小 |
string 他不是基本数据类型 所以没有包装类。包装类是基本数据库类型仅有的、
大家要注意几点:
- int 和 char 他们的包装类不是仅仅将首字母大写
- 包装类的作用–上篇博客有提。大家温故知新的再去看“亿”遍
- char 不同于C语言里面的char char 使用Unicode编码 可表示的范围更大,包括:中文,啊拉丁文,英文……
- C语言使用的是Ascill码 英文的字符和常见的字符 范围是256个数字(因为在C语言中char是int型家族的一员嘛) -128到127 C语言的char有1个字节 八位
- JDK JRE JVM之间的关系
- java所有类型的字节大小和平台没有任何关系,所以java更容易移植
回顾的就这些咯,下面开始新课咯!!!
算术运算符
基本的四则运算 + - * / %
①:int / int = int
int a = 1;
int b = 2;
System.out.println(a / b);
// 结果为 0
整型除以整型结果还是整型 ,所以我们应该换成double 型来进行计算
②:0 不能作为除数
int a = 1;
int b = 0;
System.out.println(a / b)
// 运行结果
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.main(Test.java:5)
下面我来为大家着重介绍一下这个报错信息
- Exception in thread “main” 代表错误 也就是异常
- java.lang.ArithmeticException: 错误的类型–算数异常
- / by zero 就是代表错误的原因–0作为除数
- at Test.main(Test.java:5) 程序出错的地方,在main方法里第12行
%代表取余
不仅仅可以对 int 求模, 也能对 double 来求模
同时我来为大家查缺补漏一波:看下面的代码
- 10%3==1毫无疑问
- 10%-3呢? (-3)*(-3)+1=10 所以余1
- -10%3呢? 3*(-3)+(-1)=-10 所以余-1
- -10%-3呢? (-3)*3+(-1)=-10 所以余-1
这个是余数也是重点,同时也是之前不会的点!!
下面看小数也能取余(与C语言不同的点)
System.out.println(11.5 % 2.0);
// 运行结果
//1.5
这个结果大家毫无疑问 !重点是不报错 语法没有任何问题,所以java可以用浮点数取余嗷
增量赋值运算符 += -= *= /= %=
int a = 10;
a += 1; // 等价于 a = a + 1
System.out.println(a);
在这里小编建议大家 将a+1加上括号 比如下面的式子
x*=y+=a-=b;
x, y ,b,a均已经赋值; 如果不加括号再计算就会很上头
自增/自减运算符 ++ –
int a = 10;
int b = ++a;//等同于 a=a+1,b=a
System.out.println(b);
int c = a++;//等同于 c=a,a=a+1;
System.out.println(c);
前自增与后自增的区别要记住嗷!!
结论
- 如果不取自增运算的表达式的返回值, 则前置自增和后置自增没有区别.
- 如果取表达式的返回值, 则前置自增的返回值是自增之后的值, 后置自增的返回值是自增之前的值.
关系运算符
关系运算符主要有留个 == , !=,<,>,<=,>=
int a = 10;
int b = 20;
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(a >= b);
关系运算符的表达式返回值都是 boolean 类型.只有 true 与false 两个结果;
逻辑运算符(重点)
逻辑运算符主要有三个:&&,||,!
注意:逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是 boolean
逻辑与 &&
规则: 两个操作数都为 true, 结果为 true, 否则结果为 false.
短路问题:当前面操作数为false时必为假。后面没必要执行故而造成短路后面操作数不执行
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b && b < c);//输出结果为true
逻辑或 ||
规则: 两个操作数都为 false, 结果为 false, 否则结果为 true
短路问题:当前面操作数为true时必为真时,后面没必要执行故而造成短路后面操作数不执行
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b || b < c);//返回了true
逻辑非 !
规则: 操作数为 true, 结果为 false; 操作数为 false, 结果为 true(这是个单目运算符, 只有一个操作数).
int a = 10;
int b = 20;
System.out.println(!a<b);//为false
大家看对吗?
错,这样写不对 因为逻辑非的操作数为布尔类型 a是整型 所以错误 将a<b加上括号 才能得到我们想要的结果!!!
& 和 | (不推荐使用)
& 和 | 如果操作数为 boolean 的时候, 也表示逻辑运算. 但是和 && 以及 || 相比, 它们不支持短路求值.
不推荐使用我就不过多介绍了嗷!
位运算符
Java 中对数据的操作的最小单位不是字节, 而是二进制位.
位运算主要包括 & | ~ ^
按位与 &:
如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
int a = 10;//0000 1010
int b = 20;//0001 0100
System.out.println(a & b);//最终结果为0000 0000
按位或 |:
如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
int a = 10;//0000 1010
int b = 20;//0001 0100
System.out.println(a | b);//0001 1110
注意: 当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻辑
运算.
按位取反 ~:
如果该位为 0 则转为 1, 如果该位为 1 则转为 0
int a = 0xf;
System.out.printf("%x\n", ~a)
变0为1 变1 为0 这个很容易嗷。大家要计算计算这里我不写了
注意
- 0x 前缀的数字为 十六进制 数字. 十六进制可以看成是二进制的简化表示方式. 一个十六进制数字对应 4 个二进
制位. - 0xf 表示 10 进制的 15, 也就是二进制的 1111
- printf 能够格式化输出内容, %x 表示按照十六进制输出.
- \n 表示换行符
按位异或 ^:
相同为0 不同为1
int a = 0x1;//0000 0001
int b = 0x2;//0000 0010
System.out.printf("%x\n", a ^ b);//0000 0011
这里大家要记住一句话 相同的两个数异或为0 .与0异或的数 等于它本身。这个以后做题会用得到。我会慢慢给大家分享的
移位运算(了解即可)
移位运算符有三个:
<< >> >>>
都是按照二进制位来运算.
左移 <<:
最左侧位不要了, 最右侧补 0.
int a = 0x10;
System.out.printf("%x\n", a << 1);
// 运行结果(注意, 是按十六进制打印的) 20
右移 >>:
最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
int a = 0x10;
System.out.printf("%x\n", a >> 1);
// 运行结果(注意, 是按十六进制打印的)
//8
int b = 0xffff0000;
System.out.printf("%x\n", b >> 1);
// 运行结果(注意, 是按十六进制打印的)
//ffff8000
无符号右移 >>>:
最右侧位不要了, 最左侧补 0.
int a = 0xffffffff;
System.out.printf("%x\n", a >>> 1);
// 运行结果(注意, 是按十六进制打印的)
//7fffffff
注意:
5. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
6. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
7. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
8. 移动负数位或者移位位数过大都没有意义.
条件运算符
表达式1 ? 表达式2 : 表达式3
- 当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;
- 当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.
也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法.
// 求两个整数的最大值
int a = 10;
int b = 20;
int max = a > b ? a : b;
运算符优先级
这个就是一句话,别记 用得着的时候加括号!!!!!!!
小结
- % 操作再 Java 中也能针对 double 来计算.
- 需要区分清楚 前置自增 和 后置自增之间的区别.
- 由于 Java 是强类型语言, 因此对于类型检查较严格, 因此像 && 之类的运算操作数必须是 boolean.
- 要区分清楚 & 和 | 什么时候是表示按位运算, 什么时候表示逻辑运算
关于小编
小编是一名大一学生 一直跟着b站上的大博哥学习java
学校开设的课程是C++ 自己琢磨着 在学校先研究一遍c++回头再仔细研究这样会不很吃力。所以便开始了java学习。希望大家能从一开始学习。努努力,一起变强为了更好的明天奋斗!!!!
小编的QQ号是:2206730228
欢迎大家来骚扰 一起探讨编程的奥秘。
小编是个农村人 别来欺负小编啥都不懂嗷