赞
踩
目录
1.1基本的四则运算(“+”、“-”、“ * ”、“/“、”%”)
1.2增量运算符 (“+=”、“-=”、“*=”、“%=”)
2关系运算符(“==”、“!=”、“<”、“>”、“<=”、“>=”)
什么是运算符?
就拿咋们常说的加号“+”,减号 “-”来说,他们就是运算符。“+”就是进行加法运算的符号,“-”就是进行减法运算的符号。运算符就是进行运算的符号。
运算符是干什么的?
那继续举例呗,“+”是干嘛的,就是进行数字相加的呗,“-”是干嘛的,就是进行数字相减的呗。那“>”是进行干嘛的,进行数字比较的呗。总结下来,运算符就是对操作数进行操作的。
算数运算符,关系运算符,逻辑运算符,位运算符,移位运算符,条件运算符...
1.1.1.这些都是二元运算符,所谓二元运算符,就是需要两个操作数才能进行操作。
1.1.2.使用过程中要注意自动类型转换。
1.1.3使用过程中的坑!:
“/”除法运算:int/int-->结果还是int类型,因为运算过程中没有double类型的数据,所 以 不会自动类型转化,并且还是向下取整。例如:5/2-->结果是2。同样的如果是double和int进行除法,那结果肯定会转为double类型。例如:5.0/2-->结果是2.5
“%”取余运算:(求模运算):取余运算是干什么的?当然是取余数的喽。
注意:1.java中浮点数、整数都可以取余数,而在c语言中只允许整数取余数!
2.无论是c语言还是java都不允许 分母为0的情况,也就是 1/0 或者1%0
- int a = 1;
- //给a加个2
- a = a + 2;
- //等价写法:
- a += 2;
- short a = 10;
- a = a + 1;//会报错 常量1默认是int,无法将高精度值赋给低精度
- a += 1; // 正确 系统会自动进行转变
- 1.后加加(指的是先使用该数字,使用完后加加)
- int a = 1;
- int b = a++;//先使用a,使用完后加加
- System.out.println(b);//结果是1
-
- 2.后减减
- int a = 1;
- int b = a--;//先使用a,使用完后减1
- System.out.println(b);//结果是1
-
- 3.先加加(先给该数字加1,然后使用)
- int a = 1;
- int b = ++a;//先给a加1,然后使用
- System.out.println(b);//结果是2
-
- 4.先减减
- int a = 1;
- int b = --a;//先给a减1,然后使用
- System.out.println(b);//结果是0
c和java的区别:c语言中关表达式的返回值可以用数字表示,0代表假,1代表真。
而在java中,不允许用数字表示,返回值只可能是true或者false。
举个例子
- int a = 1;
- int b = 2;
- int c = 1;
- //java中
- System.out.println (a > b);//结果:false
- System.out.println (a == c);//结果:true
- //c语言中
- printf("%d", a > b);//结果:0
- printf("%d", a == b);//结果:1
注意:c和java的区别
- int a = 10;
- //c语言中
- if (9 < a < 11)//该写法成立 9<a为真返回1,1 < 11也为真,所以表达式为真
- {
- ...
- }
-
- //java中
- if (9 < a < 11)//该写法不成立,9<a为真返回true,boolean类型和int类型无法进行比较
- {
- ....
- }
表达式1 && 表达式2,当表达式1为false时,整个表达式就会返回flase,不会再去判断表达式2。
- 10/0-->会引起by Zero异常(分母不能为0)
-
- /10>20为true,因此会执行第二个表达式10/0从而引发异常。
- System.out.println(10 > 20 && 10 / 0 == 0);
-
- //10<20为false,因此该语句就会结束并返回false,并不会去执行10/0,因此不会有异常。
- System.out.println(10 < 20 && 10 / 0 == 0); // 打印 true
表达式1 && 表达式2,当表达式1为true时,整个表达式就会返回true,不会再去判断表达式2。
规则:只能用在boolean变量上
- //正确用法
- boolean flag = ture;
- if(!flag)//只能用在boolean类型上
- {
- ...
- }
-
-
- //错误写法(该写法在c语言中能通过 但是在java中不行)
- while(!1)
- {
- ...
- }
两种用法:
方法1.将两个二进制数的每一位进行比较,如果两个相同位均为1,则返回1,否则其他为0;方法1举例:
- int a = 5;
- int b = 6;
- System.out.println (a & b);//结果为4
-
- //a变量的二进制为 0101
- //b变量的二进制为 0110
- //两者相与------&-------
- //结果: 0100--->十进制为4
方法2:和逻辑与具有同样的功能, 当表达式为boolean返回类型时,表达式1 & 表达式2,当表达式1和表达式2都为true时,该结果返回true,否则返回false。
逻辑&&和按位&的区别:逻辑与在表达式1为假时,会直接结束语句,返回为flase。而按位与无论表达式1为真为假,都会将语句全部执行。
方法2举例:
- //按位与-->即使表达式1为假,也会执行表达式2(表达式都执行)
- System.out.println(10 > 20 & 10 / 0 == 0);//结果:由于表达式2会报异常,无结果
-
- //逻辑与-->表达式1为假,不会执行表达2
- System.out.println(10 > 20 && 10 / 0 == 0);//结果:由于表达式1为假,结束语句。输出false。
两种用法:
方法1.将两个二进制数的每一位进行比较,如果两个相同位均为0,则返回0,否则其他为1;
方法1举例:
- int a = 5;
- int b = 6;
- System.out.println (a | b);//结果为7
-
- //a变量的二进制为 0101
- //b变量的二进制为 0110
- //两者相与------|-------
- //结果: 0111--->十进制为7
方法2:和逻辑或具有同样的功能, 当表达式为boolean返回类型时,表达式1 | 表达式2,当表达式1和表达式2都为false时,该结果返回false,否则返回true。
逻辑&&和按位&的区别:逻辑或在表达式1为真时,会直接结束语句,返回为true。而按位与无论表达式1为真为假,都会将语句全部执行。
方法2举例:
- //按位或
- System.out.println(10 < 20 | 10 / 0 == 0);//结果:由于表达式2会报异常,无结果
-
- //逻辑或
- System.out.println(10 < 20 || 10 / 0 == 0);//结果:由于表达式1为真,结束语句。输出true。
小结:
1.逻辑与:只要表达式1为false,语句就结束,不会继续执行。
2.逻辑或:只要表达式1为ture,语句就结束,不会继续执行。
3.按位与:a.首先会有按位操作。b.也有逻辑与的功能,但是表达式1和2都必须全部执行。
4.按位或:a.首先会有按位操作。b.也有逻辑或的功能,但是表达式1和2都必须全部执行。
- byte a = 5; // 补码:0000 0101
- a = (byte)~a;//取反:1111 1010
- System.out.println(a);//结果为-6
-
- 运算过程:1111 1010是补码---->转为原码:1000 0110 也就是-6
- int a = 1;
- int b = 0;
-
- System.out.println(a^a);//最终结果为0
- //a^a
- //a:0000 0001
- //a:0000 0001
- //-^-----------
- // 0000 0000
-
- System.out.println(a^b);//最终结果为1
- //a^b
- //a:0000 0001
- //a:0000 0000
- //-^-----------
- // 0000 0001
简单来说,就是将最左侧的(最高位)二进制位移除掉,给最右侧(最低位)二进制位补0。左移的效果就是给该数字乘2的n次方(n代表左移的位数)
举例说明:
- byte a = 63;//二进制0011 1111
- System.out.println(a<<1);//结果126
- //将0011 1111左移一位:
- //(最高位移除一位,最低位补0)--->0111 1110
简单来说,就是将最右侧的(最低位)二进制位移除掉,给最左侧(最高位)二进制位补0或1。
如何判断最高位补0补1:看符号位,符号位是1就补1,符号位是0就补0(符号位就是最高位,即最左位)。
简单来说,就是将最右侧的(最低位)二进制位移除掉,给最左侧(最高位)二进制位补0。
右移的效果就是给该数字除2的n次方(n代表右移的位数)
java和c的比较:
这个时候就想到了c语言,c语言在对“符号类型”(比如int,有正负的数字)右移,最左位也是根据符号位的变化,符号位是1就补1,符号位是0就补0。但是没有“无符号右移>>>”,并不代表c语言不能表示,c语言会使用 unsigned 来代表无符号类型,这样右移的时候最高位都是补0。
规则:表达式1 ? 表达式2 : 表达式3
来解释解释,如果表达式1为true,则会执行表达式2,否则执行表达式3.
- int a = 10;
- int b = 20;
- //如果a<b为真,则把10赋给c,否则把++b赋给c
- int c = (a < b) ? 10 : ++b;
- System.out.println(c);//结果:10
-
- //等价写法
- if (a < b)
- {
- c = 10;
- }
- else
- {
- c = ++b;
- }
什么是运算符的优先级,举个大家都知道的例子,在数学中我们计算加减乘除的时候是不是先计算乘除后计算加减,这就说明乘除的优先级>加减的优先级。优先级就等于规定了计算的顺序。
结合性分为了左结合性和右结合性。
左结合性:左做到右进行运算。
右结合性:从右到左进行运算。
什么时候使用结合性?
当优先级相同的时候我们就需要使用结合性!那什么时候优先级相同呢?
举个简单的例子
int a = 0; a = 5*3/4; //1.首先判断出来 *和/的优先级相同并且大于=的优先级 //2.*和/的优先级相同,那是先执行5*3还是先执行3/4呢? //3.此时,通过查看,*和/是左结合性,也就是先执行5*3之后再/4 //4.执行完后,只剩下=运算了。
3+5*3--->加括号后(3+5)*3.
但是呢,还是建议去多练一练记一记,如果人家的代码就是没有(),那你还不是得去读,所以掌握根本才是最好的!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。