目录
概述
运算符指明对操作数的运算方式。组成表达式的Java操作符有很多种。运算符按照其要求的操作数数目来分,可以有单目运算符、双目运算符和三目运算符,它们分别对应于1个、2个、3个操作数。
运算符按其功能来分,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和其他运算符。(百度百科)
标识符
标识符概念
1)Java对各种变量、方法和类等命名时使用的字符序列称为标识符
2)凡是自己可以起名字的地方都叫标识符 int num1 = 90;
标识符的命名规则(必须遵守)
1)由26个英文字母大小写,0-9,_或$组成
2)数字不可以开头。int 3ab = 1;//错误
3)不可以使用关键字和保留字,但能包含关键字和保留字。
4)Java中严格区分大小写,长度无限制。int totalNum = 10; int n = 90;
5)标识符不能包含空格。int a b = 90;//error
标识符的规范
1)包名:多单词组成时所有字母都小写:aaa.bbb.ccc //比如com.hsp.crm
2)类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz(大驼峰)。
比如:TankShotGame
3)变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个
单词首字母大写:xxxYyyZzz(小驼峰)。
比如:tankShotGame
4)常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY zzz
比如:定义一个所得税率 TAX RATE
5)后面我们学习到类,包,接口,等时,我们的命名规范要这样遵守
键盘输入
import java.util.Scanner;//导入包
Scanner myScananer = new Scanner(System.in);
System.out.println("请输入姓名");
String name = myScananer.next();//接受用户输入
System.out.println("请输入性别");
char sex = myScananer.next();//接受用户输入
System.out.println("请输入年龄");
int age = myScananer.next();//接受用户输入
运算符优先级
1)()、{}等
2)单目运行++ -- ~
3)算术运算符* / % + -
4)位移运算符 << >> >>>
5)比较运算符< > <= >= == !=
6)逻辑运算符 & | ^ && ||
7)三元运算符? :
8)赋值运算符 = *= /= %= += -+ <<= >>= >>>= &= ^= |=
算数运算符
运用
public class ArithmeticOperator {
public static void main(String[] args) {
//除法,注意精度丢失
System.out.println(10 / 4); //2
System.out.println(10.0 / 4); //2.5
double d1 = 10 / 4; // 10 / 4 = 2,定义d1为2.0
double d2 = 10.0 / 4;
System.out.println(d1); //2.0
System.out.println(d2); //2.5
//取模
//运算逻辑 a % b = a - a / b * b;
System.out.println(10 % 3); //1
System.out.println(-10 % 3); //-1
System.out.println(10 % -3); //1
System.out.println(-10 % -3); //-1
//自增 ++1 与 i++ ;
//独立使用两者无疑
int i = 1;
i++;
System.out.println(i);//2
++i;
System.out.println(i);//3
//作为表达式使用两者相同
int j = 1;
// j = j + 1; k = j;
int k = ++j;
// l = j; j = j + 1;
int l = j++;
System.out.println(k); //2
System.out.println(l); //2
}
}
除法
整数进行除法运算会自动丢弃小数位,浮点数除法则会保留小数位,注意,定义浮点数一定要保留小数位,否则将会按整数运算
取模
Java取模运算逻辑,a % b = a - a / b *b;
++
独立使用时
++i 与i++用法相等 i = i + 2;
作为表达式使用
K = ++i; i = i+1,k= i(运算后的i);
J = i ++; J = i ,i = i +1
延伸
public class One { public static void main(String[] args) { // int i = 1; // i = i++; //使用该语句时执行逻辑(1) temp = i;(2)i = i + 1; (3) i = temp; // System.out.println(i); //1 int i = 1; //使用该语句时执行逻辑(1) i = i+1; (2)temp = i ;(3)i = temp; i = ++i; System.out.println(i); //2 } }
练习一
假如还有59天放假,问:合多少个星期零多少天?
思路
1.需求假如还有59天放假,合多少个星期零多少天
2.思路分析 使用int变量定义day,一个星期七天,多少个星期day / 7;零多少天 days % 7;输出
3.代码实现
public class days { public static void main(String[] args) { int day = 59; int week = day / 7; int surplusDay = day % 7; System.out.println(day + "天合" + week + "个星期零" +surplusDay+"天" ); // 输出结果 // 59天合8个星期零3天 } }
练习二
华氏度转换
定义个变量保存华氏度,华氏度传摄氏度公式5/9(华氏度-100度),注意
public class FahrenheitParse { public static void main(String[] args) { double Fahrenheit = 259.4; double centigrade = 5.0 / 9 * (Fahrenheit-100); System.out.println("华氏度" + Fahrenheit+"等于摄氏度"+centigrade); } //debug //华氏度259.4等于摄氏度88.55555555555554 //精度控制以后再学 }
关系运算符
关系运算符(比较运算符)
==
!=
<
>
<=
>=
instanceof 检查是否是类的对象 "hso" instanceof String 结果为true
1)关系运算符的结果都是boolean型,也就是要么是true,要么是false
2)关系表达式经常用在if结构的条件中或循环结构的条件中
逻辑运算符
逻辑与 & ,两者同为true则为true,否则为false
短语与 &&,两者同为true则为true,否则为false,单路与只运算第一个表达式,正确则判断正
区别逻辑与与短路与
&&第一个为false则第二个不会判断,输出结果为false,逻辑与&两个都要判断,效率
逻辑或 | ,两者有一个true则为true,否则为false
短路或 || ,两者有一个true则为true,否则为false
区别
短路或,第一个条件为true,则第二个条件不判断,最终结果为true,,逻辑或则两个都要判断
!a,取反,a为true,!a为false
a^b,逻辑异或,ab相同为true,ab不同为false,
int x = 5;int y=5; if(x++==6 &++y==6){//逻辑与 x = 11; } System.out.println("x="+x+",y="+y) //;6,6
int x = 5,y = 5; if(x++==6 && ++y==6){ x = 11; } System.out.println("x="+x+",y="+y); //6,5
int x = 5,y = 5; if(x++==5 |++y==5){ x =11; } System.out.println("x="+x+",y="+y); //11,6
int x = 5,y = 5; if(x++==5 |l++y==5){ x =11; } System.out.println("x="+x+",y="+y); //11,5
赋值运算符
赋值过程中有强制类型转换
byte b = 2; //errore,b = b + 2;2为int类型等号右边会按高精度int进行运算结果为int类型,将高精度赋给低精度会报错 b += 2;//等价于 b = (byte) (b + 2);会进行强制转换 b++;//等价于(byte)(b = b + 1);
赋值运算符特点
1)运算顺序从右往左int num = a +b +C;
2)赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值int num = 20; int num2= 78* 34 - 10; int num3 = a;
3)复合赋值运算符等价于下面的效果
比如:a+=3;等价于a=a+3;4)复合赋值运算符会进行类型转换。byte b = 2; b+=3; b++;
三元运算符
基本语法 调价表达式 ?表达式1:表达式2
记忆,一真大师,表达式为真返回1,false返回2
练习,三个数选择最大
int n1 = 1; int n2 = 2; int n3 = 3;max2 //思路,现将n1余n2的比较结果放入max1,再将max1与max2的比较结果放入max2 int max1 = n1>n2?n1:n2; int max2 = max1>n3?max1:n3; System.out.println("最大数是"+max2); //一条语句 int max = (n1>n2?n1:n2)>n3?(n1>n2?n1:n2):n3;//最好使用上面那个,逻辑清晰 System.out.println("最大数是"+max);
位运算符
进制转换
略
原码反码补码(重点)
1)二进制最高制位是符号位:0表示正数1表示负数(0正1负)
2)正数的原码,反码,补码都一样(三码合一)
3)负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)
4)负数的补码=它的反码+1,负数的反码=负数的补码-1
5)的反码,补码都是0
6) java没有无符号数,换言之,java中的数都是有符号的7.在计算机运算的时候,都是以补码的方式来运算的.8.当我们看运算结果的时候,要看他的原码0
位运算符1
位运算符
java中有7个位运算(&、|、^、~、>>、<<和>>>)
分别是按位与&、按位或|、按位异或^,按位取反~,它
Ⅰ
按位与&,两位全为1,结果为1,否则为0
按位或 | 两位有一个为1,结果为1,否则为0
按位异或^ 两位一个为0,一个为1,结果为1,否则为0
按位取反~:0->1,1->0
比如:2&3=? ~-2 =? ~2=? 2|3=? 2^3=?
计算 ~-2; 1)先得到-2的原码 10000000 00000000 00000000 00000010 2)得到-2的反码 11111111 11111111 11111111 11111101 3)得到-2的补码 11111111 11111111 11111111 11111110 4)~-2进行操作 00000000 00000000 00000000 00000001 ~-2 = 1;
计算~2 1)先得到2的补码 00000000 00000000 00000000 00000010 2)对~2进行操作 11111111 11111111 11111111 11111101 运算后的补码 3)运算后的反码 11111111 11111111 11111111 11111100 4)运算后的原码 10000000 00000000 00000000 00000011//最高位符号位不变 运算结果为 -3;
位运运算2
位运算符>>、<<和>>>
运算规则:
1)算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
2)算术左移<<;符号位不变,低位补0
3) >>>逻辑右移也叫无符号右移,运算规则是:低位溢出,高位补0
4)特别说明:没有<<<符号
int a=1>>2; //1 => 00000001 => 00000000 本质1/2/2 =0
int c=1<<2; //1 => 00000001 => 00000100 本质1*2*2=4