小白要努力之java学习运算符

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 他不是基本数据类型 所以没有包装类。包装类是基本数据库类型仅有的、
大家要注意几点:

  1. int 和 char 他们的包装类不是仅仅将首字母大写
  2. 包装类的作用–上篇博客有提。大家温故知新的再去看“亿”遍
  3. char 不同于C语言里面的char char 使用Unicode编码 可表示的范围更大,包括:中文,啊拉丁文,英文……
  4. C语言使用的是Ascill码 英文的字符和常见的字符 范围是256个数字(因为在C语言中char是int型家族的一员嘛) -128到127 C语言的char有1个字节 八位
  5. JDK JRE JVM之间的关系
  6. 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);

前自增与后自增的区别要记住嗷!!
结论

  1. 如果不取自增运算的表达式的返回值, 则前置自增和后置自增没有区别.
  2. 如果取表达式的返回值, 则前置自增的返回值是自增之后的值, 后置自增的返回值是自增之前的值.

关系运算符

关系运算符主要有留个 ==  ,  !=,<,>,<=,>=
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 这个很容易嗷。大家要计算计算这里我不写了

注意

  1. 0x 前缀的数字为 十六进制 数字. 十六进制可以看成是二进制的简化表示方式. 一个十六进制数字对应 4 个二进
    制位.
  2. 0xf 表示 10 进制的 15, 也就是二进制的 1111
  3. printf 能够格式化输出内容, %x 表示按照十六进制输出.
  4. \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. 当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;
  2. 当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.
    也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法.
// 求两个整数的最大值
int a = 10; 
int b = 20; 
int max = a > b ? a : b;

运算符优先级

这个就是一句话,别记 用得着的时候加括号!!!!!!!

小结

  1. % 操作再 Java 中也能针对 double 来计算.
  2. 需要区分清楚 前置自增 和 后置自增之间的区别.
  3. 由于 Java 是强类型语言, 因此对于类型检查较严格, 因此像 && 之类的运算操作数必须是 boolean.
  4. 要区分清楚 & 和 | 什么时候是表示按位运算, 什么时候表示逻辑运算

关于小编

小编是一名大一学生 一直跟着b站上的大博哥学习java
学校开设的课程是C++ 自己琢磨着 在学校先研究一遍c++回头再仔细研究这样会不很吃力。所以便开始了java学习。希望大家能从一开始学习。努努力,一起变强为了更好的明天奋斗!!!!
小编的QQ号是:2206730228
欢迎大家来骚扰 一起探讨编程的奥秘。
小编是个农村人 别来欺负小编啥都不懂嗷

猜你喜欢

转载自blog.csdn.net/qq_53711262/article/details/115418098