目录
小白的疑惑
大白话运算符概念
运算符概念
运算符分类
特别注意
代码定天下
二元运算符
关系运算符代码
逻辑运算符
位运算符
拓展运算符
三目运算符
小白的疑惑
很多没接触编程的小伙伴都会顿感疑惑,啥是运算符?
大白话运算符概念
小学算过加减乘除吧
比过大小吧
学过与、或、非,即包含、交集之类的吧
那在做这些运算的时候,我们是不是都有相应的符号去表示?
这些表示运算的符号就叫运算符!!!
运算符概念
运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。
运算符分类
谁能永远就能认识那几个运算符,学习的过程就是不断求知的过程,要有一种精神,让我研究的没有新的东西出现的时候我就换个方向研究。
那好了,我们看一下关于运算符部分会多少才是尽头?
分类 |
表现形式 |
算术运算符 |
+,-,*,/,%,++,-- |
赋值运算符 |
= |
关系运算符 |
>,<,>=,<=,==,!=,instanceof |
逻辑运算符 |
&&,||,! |
位运算符 |
&,|,^,~,>>,<<,>>> |
条件运算符 |
? |
扩展赋值运算符 |
+=,-=,*=,/= |
特别注意
java中的==判断两个变量是否相等;
代码定天下
二元运算符
运算规则为:
- 整数型只要有long类型参与运算,结果为long类型
- 没有long类型参与运算都默认为int类型
- 有double类型参与的运算,结果为double类型
- ++,--放置的位置不同,导致的运算结果也会不同
class Operator{
//二元运算符
int a = 45;
int b = 30;
int c = a+b;
int d = a-b;
int e = a*b;
int f = a/b;
int g = a%b;
System.out.println(c); //75
System.out.println(d); //15
System.out.println(e); //1350
System.out.println(f); //1
System.out.println(g); //15
}
class Operator{
public static void main(String[] args){
long money = 18888888888L;
int money1 = 299;
short money2 = 16;
byte money3 = 5;
System.out.println(money+money1+money2+money3);//long
System.out.println(money+money1+money2); //int
System.out.println(money+money1); //int
}
}
public class OperatorPlus {
public static void main(String[] args) {
//++ -- 自增、自减一元运算
int order = 3;
System.out.println(order); //正常打印order值,结果为3
int amountOrder = order++; //后++先运算再加1
System.out.println(order); //参与后++运算后3+1=4
int amountOrder1 = ++order; //前++先加1再运算
System.out.println(order); //结果为5
System.out.println(amountOrder); //结果为3
System.out.println(amountOrder1); //结果为5
}
}
字符串链接符+
- 字符串在前,后面内容不参与运算直接拼接字符串
- 字符串在后,前面计算完成后拼接字符串
class SpecialFocous{
public static void main(String[] args){
//关于字符串拼接原则 +
int a = 5;
int b = 4;
System.out.println(" "+a+b);//54
System.out.println(a+" "+b);//5 4
System.out.println(a+b+" ");//9
}
}
关系运算符代码
- 程序中应尽量避免浮点数的比较,例如System.out.println(2.00-1.10==0.90),永远返回false.
- float、double类型的运算往往都不准确
正确的方式
- 利用整数来表示小数int或者long,例如1.01元,则可以以分为单位来表示。
- 利用BigDecimal进行浮点型运算,但是注意一定要使用String类型的构造方法,如果使用浮点型构造方法也不能得到准确的结果。
class Operator{
public static void main(String[] args){
//运算得出的结果非true即false
int a = 20;
int b = 10;
System.out.println(a>b); //true
System.out.println(a<b); //false
System.out.println(a==b); //false
System.out.println(a!=b); //true
}
}
逻辑运算符
class LogicOperator {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
// &&与运算 有false则false,无false为true
System.out.println("a&&b结果为"+(a&&b)); //false
// ||有true则true,无true则false
System.out.println("a||b结果为"+(a||b)); //true
//结果取反
System.out.println("!a&&b结果为"+!(a&&b)); //true
//短路运算,即前面为false程序直接停止执行
int c = 5;
boolean d =(c<3)&&(c++<3);
System.out.println(d);//结果为false
System.out.println(c);//结果为5,因为短路后面不进行操作,故c的值没有发生变化
}
}
位运算符
class ShiftOperator {
public static void main(String[] args) {
/*
计算机内部识别表现形式为补码
A = 0011 1100 32+16+8+4=60
B = 0010 0101 32+4+1=37
-------------------------------
正数的原反补相同
A&B 0010 0100 32+4=36
A|B 0011 1101 32+16+8+4+1=61
A^B 0001 1001 16+8+1=25
负数的原反补遵循相应的原则
~B 1101 1010 -(64+16+8+2)=-90很多同学会在这里疑惑
反码 1101 1001
源码 1010 0 110 -(32+4+2) = -38
*/
int A = 60;
int B =37;
System.out.println( A&B); //36
System.out.println( A|B); //61
System.out.println( A^B); //25
System.out.println( ~B); //-38
}
}
面试题
2*8怎么运算最快?
用位运算的方式即可,如果采用直接运算,底层逻辑较为复杂,而采用位运算只需要由开关灯来决定。2*8=2*2*2*2
class TestOperator{
public static void main(String[] args){
/*
2*8=2*2*2*2
<< 右移原数字变大,移几位就乘以2的几次方
>> 左移原数字变小,移几位就除以2的几次方
*/
System.out.println(2<<3); //结果为16
}
}
拓展运算符
+=,-=,*=,/=
class LazyOperator{
public static void main(String[] args){
// +=,-=,*=
int price = 10;
int count = 20;
price*=count; //price = price*count
System.out.println(price); //输出结果为200
}
}
三目运算符
格式: (关系表达式)?y:z
关系表达式的值非true即false,true输出y,false输出z
class ThreeEyes{
public static void main(String[] args){
int zhangAge = 60;
int mingAge = 30;
String relationship;
relationship = (zhangAge<mingAge)?"ming是哥哥":"ming是弟弟";
System.out.println(relationship);
}
}
作业:运算符的优先级测试