运算符:优先级()
今日单独学习语法之运算符比较重要的内容
- 算术运算符:+,-,*,/,%(模运算,就是取余),++,–
- 赋值运算符 =
- 关系运算符:>,<,>=,==(Java里面等于是用这个),!=(这个叫做不等于),instanceof
- 逻辑运算符:&&(与),||(或),!(非)
- 位运算符:&, |, ^, ~, >>, <<, >>>(了解!!!)
- 条件运算符 ? :
- 扩展赋值运算符 +=,-=,*=,/=
package operator;
public class Demo1 {
public static void main(String[] args) {
// 二元运算符
//Ctrl+D 复制当前行到下一行
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println(a + b);
System.out.println(a - d);
System.out.println(a * b);
System.out.println(a/b);//这样值为0,正常应该是0.5,取整数只能显示0,所以需要强制转换,如下:
System.out.println(a/(double)b);//正常打印值为0.5
}
}
再来个练习,
package operator;
public class Demo2 {
public static void main(String[] args) {
long a=123123123123123L;
int b=123;
short c=10;
byte d=8;
System.out.println(a+b+c+d);//Long,如果其中有Long,结果一定是Long,如果其中有个double,结果也一定是double
System.out.println(b+c+d);//Int
System.out.println(c+d);//Int
}
}
以上内容都说明变量是非常重要的内容,需要长期温习;
下面练习下关系运算符。
package operator;
public class Demo3 {
public static void main(String[] args) {
//关系运算符返回的结果:正确,错误 布尔值
//未来经常会跟if结合起来使用
int a=10;
int b=20;
int c=21;
System.out.println(c%a);//模运算,其实就是取余,打印值1,这个意思是取c除以a的余数,即 c / a 21 / 10=2...1
System.out.println(a>b);//打印值false
System.out.println(a<b);//true
System.out.println(a==b);//false
System.out.println(a!=b);//true
}
}
再看看++ --运算符,这个非常重要,单独练习☆
package operator;
public class Demo4 {
public static void main(String[] args) {
//++ -- 叫做自增,自减,也叫一元运算符
int a=3;
int b=a++;//a++ 相当于a=a+1 自己给自己+1,执行完这行代码后,先给b赋值,再自增
//相当于这里隐藏了一个a=a+1,此时a值相当于4,示范下:
System.out.println(a);//打印值为4,没问题
int c=++a;// 注意这个顺序,意思是执行完这行代码,先自增再给c赋值,所以下面又隐藏了一个a=a+1
//此时a相当于5了
System.out.println(a);//打印值为5
System.out.println(b);//打印值为3,没问题,因为是先赋值了
System.out.println(c);//打印值为5,没问题,因为先自增再被赋值了
//-- 也是一样的道理,可以多次往复练习
/* 拓展下,我们日常幂运算 比如2^3,相当于2的三次方,就是2*2*2=8,Java中没这么写,只能↓↓↓
很多运算,我们会使用一些工具类来操作
*/
double pow= Math.pow(2,3);
System.out.println(pow);//返回值8
}
}
下面练习逻辑运算符
package operator;
public class Demo5 {
public static void main(String[] args) {
// 逻辑运算符
//&&与(and) ||或(or) !非(取反)
boolean a = true;
boolean b = false;
System.out.println("a && b : " + (a && b));//逻辑与运算:两个变量都为真,结果才为true
System.out.println("a || b : " + (a || b));//逻辑或运算:两个变量有一个为真,则结果就为true
System.out.println("!(a && b) : " + (!a && b));//如果是真,则变为假,如果是假则变为真
//拓展,短路运算
int c=5;
boolean d = (c<4)&&(c++<4);//短路了,意思是前面是false,则”与“后面不用再运算了也为false
System.out.println(d);//打印值false
System.out.println(c);// 打印值为5,没问题,因为后面的++运算短路了,没有运算
}
}
继续练习位运算
package operator;
public class Demo6 {
public static void main(String[] args) {
/*
A=0011 1100
B=0000 1101
A&B =0000 1100 与,意思是上下比较,如果两个都是1则为1,如果有0则为0,所以应该返回0000 1100
A|B =0011 1101 或,意思是上下比较,如果都是0则为0,否则为1
A^B =0011 0001 亦或,意思是上下比较,如果位相同则为0,否则为1
~B =1111 0010 取反
拓展,2*8 = 16, 2*2*2*2 计算机最快的计算方式是怎样?
未来为了极高的运算效率,经常会涉及到二进制以及位运算,效率极高!!!
<< 左移的意思,*2
>> 右移的意思,/2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3);//返回值16,这个意思是在二进制上,左移3位后的数字 *2
}
}
扩展运算符,懒人运算符,新手不建议使用
package operator;
public class Demo7 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a+=b;// a=a+b
a-=b;// a=a-b
System.out.println(a);
//拓展知识:字符串连接符 + ,String
System.out.println(""+a+b);//返回值1020,空字符串在前面,后面进行拼接
System.out.println(a+b+"");//返回值30,空字符串在后面,前面会依旧运算
}
}
再看看条件运算符,也是三元运算符
package operator;
public class Demo8 {
public static void main(String[] args) {
//三元运算符
// x ? y : z
//如果 x==true,则结果为y, 否则结果为z
int score = 80;
String type = score <60 ? "不及格" : "及格";
//跟if一样,但是这个?:可以让代码更精简好看,也是懒人运算符,但最好掌握
System.out.println(type);//返回值 及格
}
}
整体下来,今天学习内容有点枯燥,但好在一直在练习代码,也算比较好,通过今日练习依然感受到变量很重要,需要回头去多加练习。
进制转换原理和计算方式
另外今日学习有几个运算符一直跟进制转换,加上之前对此并不是很了解,所以额外给自己加学了下进制的原理和转换,学会了就得分享,尽量讲的言简意赅。
底层原理
二进制:逢二进一,所以只有0,1,要想用二进制记数,就只能看到例如1101,1011010,101010101011101等这样的东西;
十进制:逢十进一,只有9以内的数字,即,0,1,2,3,4,5,6,7,8,9,也就是我们日常用的方式,表现的数字例如58,837,1908等;
八进制:逢八进一,只有7以内的数字,即0,1,2,3,4,5,6,7,表现为56,365,134等;
十六进制:逢十六进一,只有0到15的数字,即0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,但是因为不能用10,11这样的来继续表示,所以十六进制需要用字母来继续表示,10用A,11用B,12用C,13用D,14用E,15用F,表现出来的数字例如85E,97C;
转换计算方式
- 其他进制转换成十进制,从右向左,依次用相应进制的数的几次幂乘以对应数后相加(具体几次就看从右向左第几位-1,例如第一位,就是0次方)例如:
- 二进制1011转换成十进制(相应进制为2):从右向左依次是1✖️2º+1✖️2¹+0✖️2²+1✖️2³=11;
- 以此类推,八进制用8,例如 733= 3✖️8º+3✖️8¹+7✖️8²=475;
- 十六进制56a=10✖️16º+6✖️16¹+5✖️16²=1386
- 十进制转换成其他进制,则一直除以对应进制数到最后除不了为止,再余数倒数即可,例如:
- 72转为二进制,则为1001000:
- 412转为八进制,则为634:
- 381转为16进制,则为17d: