Java从小白到入门,Day2(运算符和表达式)
按作用于操作数的数量分为:一目运算符:++、--、+(正号)、-(负号)、!、~(位非);(操作数只有1位)
二目运算符:+(加)、-(减)、*、/、%等;(操作数有2位)
三目运算符:?:。类型:代码1?代码2:代码3; (代码1位boolean类型,代码2与代码3同类型),表示如果代码1为真,则取代码2为结果,如果代码1为假,则取代码3为结果。
按功能划分:转换运算符、算术运算符、逻辑运算符、位运算符、赋值运算符。
转换运算符:将摸个类型的数据转换为其他类型的数据。
数字类型→数字类型:取范围小的类型转换为范围大的类型,使用隐式转换,为安全转换。反之,使用显式转换,该转换为不安全的。
隐式转换:例如, int a=1; double b=a;
显式转换:例如,double a=1; int b=(int)a;
返回类型:就是一句代码运算结果的类型。
算术运算符:用于数学运算(+、-、*、/、%),可以作用于数字类型,也可以作用于char类型。 一个算术运算的返回类型为取值范围大的操作数的类型。
逻辑运算符:返回类型为boolean类型。(>、<、==、!=、&&、||、!)等。
对字符串的比较,必须使用:字符串1.equals字符串2,返回类型为boolean类型。
&&,||:左右两端必须为boolean类型。
!(非):右边必须为boolean类型。
位运算符:用于对数字的二进制格式进行运算。
|:或运算(二元),将两位二级制同为0,取0;反之,取1。
&:且运算(二元),将将两位二级制同为1,取1;反之,取0。
^:异运算(二元),将将两位二级制不同的,取1;反之,取0。
~:非运算(一元),将右边的数字的二进制格式取相反(0变1,1变0)
<<:左移位(二元),将左边的数字的二进制格式向左移动指定的位数。
>>:右移位(二元),将右边的数字的二进制格式向右移动指定的位数。
二进制 转 十进制: 例如,0011,运算过程(从右向左看,1*20+1*21+0*22+0*23)=3,依次类推。
十进制 转 二进制: 例如,22,运算过程(24最接近22,22-24=6,;22最接近6,6-22=2;21=2),所以有 0*20+1*21+1*22+0*23+1*24,二进制表示为10110 , 依次类推
赋值运算符:用于将赋值符号的右边的计数结果赋值给左边的变量。(=、+=、-=、/=、*=、%=)
类型:a+=b+c→等效于a=a+(b+c)
累加,累减运算符:(++、--),返回值为作用的变量类型相同。
a++:表示 计算结果与变量相同,然后将变量+1。
++a:表示先将变量+1,然后计算结果与变量相同。
运算优先级:有多个运算符参与运算时;
1,代码整体上从左到右进行; 2,若遇到括号(),先计算括号。 3,若遇到函数调用,立即将函数调用的结果计算出来。
表达式:任何一个由运算符和操作数组成的语句和语句的一部分。 所有的表达式都有返回类型。任何一个表达式都可以与其他表达式运行计算,只要返回类型满足要求。
1, 赋值表达式的返回类型为被赋值的变量的类型,返回结果为变量的值。
2,定义变量的语句没有返回类型(void).
3,输出语句没有返回类型。
例1:
int i=1;
i=(i=i+(i+(i=2)+i)+i)+3+i;
/*JVM中运算原理:i=(i=i+(i+(i=2)+i)+i)+3+i
* i=i+(i+(i=2)+i)+i
* i+(i+(i=2)+i)+i
* 1+(i+(i=2)+i)+i i=1
* 1+(1+(i=2)+i)+i i=1
* 1+(1+2+i)+i i=2
* 1+(1+2+2)+2
* 8 i=8
* 8+3+i
* 19
*/
System.out.println(i);
例2:
int a=1,b=2,c=3;
System.out.println(a+b+c);
/*a+b+c在JVM
* 1,去内存中找a对应的数据
* 2,读取下一个预算符 +
* 3,读取+后面的运算数b,同时读取b后面的运算式,看运算符,看是否先运行,+b+
* 4,计算a+b的结果,记为temp,
* 5,读取下一个预算符 +,
* 6,读取+后面的运算数c,同时读取c后面的运算式,无运算符,直接temp+c,计算结果
*/
例3:
System.out.println(-11%-7);
/*前面的操作数提供最终运算结果的符号,
* 前面的操作数的绝对值与后面操作数的绝对值提供最终结果
* -11%-7 转换为-(11%7)
*/