Java零基础—运算符
运算符
运算符有优先级,不确定的就加括号。按功能划分主要运算符如下:
算术运算符
常见的加减乘除,再加上取余
/* + 求和 - 相减 * 乘积 / 商 % 求余数 ++ 自加 -- 自减 */ public static void main (String[] args){ int i = 10; int j = 3; System.out.println( i + j );//13 System.out.println( i - j );//7 System.out.println( i * j );//30 System.out.println( i / j );//3 System.out.println( i % j );//1 //++ 运算可以出现在变量前,也可以出现在变量后。 int k = 10; k ++;//单目运算符 System.out.println(k);//11 int y = 10; ++ y; System.out.println(y);//11 int a = 100; int b = a ++;//先赋值,再自加1 System.out.println(a);//101 System.out.println(b);//100 int c = ++ a;//先自加,在赋值 System.out.println(a);//102 System.out.println(c);//102 int d = 10; System.out.println(d ++);//10 int e = 10; System.out.println(++ e);//11 }
关系运算符
关系运算符比较的是运算符两边的变量保存的值,运算结果一定是布尔类型true/false。
/* > 大于、>= 大于等于、< 小于、<= 小于等于、== 等于、!= 不等于 */ public static void main(String[] args){ int a = 10; int b = 10; System.out.println( a > b );//false System.out.println( a >= b );//true System.out.println( a < b );//false System.out.println( a <= b );//true System.out.println( a == b );//true System.out.println( a != b );//false }
逻辑运算符
逻辑运算符要求两边的算子都是布尔类型,并且最终的运算结果也是布尔类型。
/* & 逻辑与 | 逻辑或 ! 逻辑非 ^ 逻辑异或 && 短路与 || 短路或 */ public static void main(String[] args){ // & 两边的算子都是true,结果才是true System.out.println(true & true); //true System.out.println(true & false); //false System.out.println(false & true); //false System.out.println(false & false); //false // | 两边的算子,只要有一个是true,结果就是true System.out.println(true | true); //true System.out.println(true | false); //true System.out.println(false | true); //true System.out.println(false | false); //false // ! 取反,单目运算符 System.out.println( !false );//true System.out.println( !true );//false // ^ 两边的算子只要不一样,结果就是true System.out.println(true ^ true); //false System.out.println(true ^ false); //true System.out.println(false ^ true); //true System.out.println(false ^ false); //true //短路与和逻辑与最终的运算结果是相同的、短路或和逻辑或最终的计算结果也是相同的,只不过短路与、短路或存在短路现象。短路现象概况为:根据左边算子可以确定最终结果,那边就不再运算右边算子 int x = 10; int y = 8; int m = 10; int n = 8; System.out.println( x < y & ++x < y); System.out.println(x);//11 System.out.println( m < n && ++m < n); System.out.println(m)//10 }
逻辑与和短路与、逻辑或和短路或,根据实际需求选择,没有绝对的用或不用。
赋值类运算符
先执行等号右边的表达式,将执行结果赋值给左边的变量。
基本的赋值运算符
/* = */ public static void main(String[] args){ int i = 5; System.out.println(i);//5 i = i + 10; System.out.println(i);//15 }
扩展的赋值运算符
扩展类运算符不改变运算结果的数据类型,但是使用的时候可能会损失精度。
/* +=,-=,*=,/=,%= */ public static void main(String[] args){ int i = 5; i += 10;//扩展的运行符,等同于: i = i + 10;其他扩展的运算符类似 System.out.println(i);//15 byte a = 10;//10没有超出byte的取值范围,赋值正确 //a = a + 5;//编译错误,a + 5 为int类型,将int类型赋值给byte,即大容量向小容量赋值,需强制类型转换,所以会编译错误,提示:可能会损失精度 a += 5;//编译通过,等同于 a = (byte) (a + 5),不等同于 a = a + 5. byte b = 0; b += 128;//编译通过 System.out.println(b);//-128 运行结果损失精度 }
字符串连接运算符
“+”运算法在Java中有两个作用,一是加法运算,求和;二是字符串的连接符。当“+”两边的数据都是数字时,一定进行的是加法运算;当“+”两边只要有一个数据是字符串,一定会进行字符串的连接运算,且最后的运算结果是一个字符串。
public static void main(String[] args){ System.out.println( 10 + 20 );//30,求和 System.out.println( 10 + 20 + 30 );//60,求和 System.out.println( 10 + 20 + "30");//3030,第一个+号求和,第二个+号是字符串连接 System.out.println( 10 + (20 + "30"));//102030,括号里面的+号是字符串连接,运算结果是字符串2030,然后是10+“2030”,最后得到102030 int a = 10; int b = 20; System.out.println( a + "+" + b + "=" + a + b);//10+20=1020 System.out.println( a + "+" + b + "=" + (a + b));//10+20=30 }
三元运算符
三元运算符也叫三目运算符或条件运算符,语法规则为:布尔表达式 ?表达式1 : 表达式2
其执行原理为:当布尔表达式的结果为true时,选择表达式1为整个表达式的执行结果,当布尔表达式为false时,选择表达式2为整个表达式的执行结果。
public static void main(String[] args){ boolean sex = false; String st = sex ? "男" : "女" System.out.println(st);//女 System.out.println(sex ? '男' : '女');//女 }
位运算符
位操作是程序设计中对位模式按位或二进制数的一元和二元操作。在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)。
位运算符用来对二进制位进行操作,参与运算的两个数均以补码出现,一般只能操作整数类型的变量或值,Java中提支持的位运算符有7种,除 ~ 以外,其余均为二元运算符。
& 按位与
| 按位或
^ 按位异或
~取反
<<左移
>>右移
>>>无符号右移运算符
第一个操作数 |
第二个操作数 |
按位与& |
按位或 | |
按位异或 ^ |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
按位与运算
按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
public static void main(String[] args){ System.out.println( 5 & 9 );//1 }
运算原理如下图:
按位或运算
按位或运算符“|”是双目运算符。 其功能是参与运算的两数各对应的二进位相或。只要对应的两个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
public static void main(String[] args){ System.out.println( 5 | 9 );//13 }
运算原理如下图:
按位异或运算
按位异或运算符“^”是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两个对应的二进位相异时,结果为1。参与运算数仍以补码出现。
public static void main(String[] args){ System.out.println( 5 ^ 9 );//12 }
求反运算
求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。
public static void main(String[] args){ System.out.println( ~-5);//4 }
运算原理如下图:
左移运算
左移运算符,是双目运算符。左移n位就是乘以2的n次方。 其功能把左边的运算数的各二进位全部左移若干位,由右边的数指定移动的位数,高位丢弃,低位补0。
public static void main(String[] args){ System.out.println(-5 << 2);//-20 }
运算原理如下图:
右移运算
右移运算符,是双目运算符。右移n位就是除以2的n次方。其功能是把左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1.
public static void main(String[] args){ System.out.println(-5 >> 2);//-2 }
运算原理如下图:
无符号右移运算符
无符号右移运算符,把第一个操作数的二进制码右移指定位数,左边空出来的数总是以0补充。无符号右移运算得到的结果总是一个正数。
public static void main(String[] args){ System.out.println(-5 >>> 2);//1073741822 }
运算原理如下图:
posted on 2020-12-21 22:37 AnYeYiYang 阅读(111) 评论(0) 编辑 收藏 举报