JAVA学习:语法基础(运算符)

tech2022-09-11  112

JAVA语法基础

JAVA中的运算符1. 常见的JAVA运算符2. 赋值运算符3. 算数运算符4. 关系运算符5. 逻辑运算符6. 按位运算符7. 特殊运算符——移位运算符

JAVA中的运算符

1. 常见的JAVA运算符

在JAVA中,常见的运算符有以下几种:

赋值运算符:= , += , -= , /= , *= , %=算数运算符:+ , - , * , / , % , ++ , –关系运算符:> , < , == , >= , <= , !=逻辑运算符: && , || , !位运算符: & ,| ,~ ,^ , < <, > >, > > >特殊运算符: new , [ ] , ( )

2. 赋值运算符

赋值运算符常用于对变量进行赋值 示例:

package com.xzit.assign; /** * 赋值运算符 =, +=, -=, *=, /=, %= * @author SPIC * */ public class AssignOperator { static final int MAX = 1000; public static void main(String[] args) { int age; age = 23; age = MAX; double height = age; System.out.println(height); int num = 100; /** * 复合赋值运算符 */ num += age;// 相加后赋值 System.out.println(num); num -= age;// 相减后赋值 System.out.println(num); num *= age;// 相乘后赋值 System.out.println(num); num /= age;// 相除后赋值 System.out.println(num); num %= age;// 相取余后赋值 System.out.println(num); } }

3. 算数运算符

算术运算符用来对1个(单目)或2个(双目)操作数进行数学计算,得出一个最终计算结果 +(和), —(差), *(积), /(商), %(模) ++(自增1) — —(自减1)——只对一个运算符进行运算

示例:

package com.xzit.assign; /** * 算数运算符(双目运算符和单目运算符),单目运算符只对变量起作用 * @author SPIC * */ public class ArithmeticOperator { public static void main(String[] args) { // 双目运算符,需要2个操作数,从左侧向右侧计算 int age0 = 12; int age2 = 13; System.out.println("相加运算"+(age0+age2)); System.out.println("相减运算"+(age0-age2)); System.out.println("相乘运算"+(age0*age2)); System.out.println("相除运算"+(age0/age2)); System.out.println("相取余数/取模运算"+(age0%age2)); /** * 单目运算符,只对变量进行操作++【自增1】 --【自减1】 */ int n = 5 ; int m = 6 ; // n = n + 1 ; n ++ ; // 对n变量进行加1赋值给n,等效于n=n+1; n+=1; ++在变量前后没有变化 System.out.println(5+"自增1的结果是"+n); // int g = m++ ; // 先将m的原值赋值给g,后m自增1 int g = ++m ; // 先将m自增1,然后将增加后的m值赋值给g System.out.println(g); } }

4. 关系运算符

关系运算符用来对2个操作数进行比较运算并得出最终boolean结果

关系运算符: > 判断大于是否成立 < 判断小于是否成立 >= 判断大于或等于是否成立 <= 判断小于或等于是否成立 == 判断等于是否成立 != 判断不相等是否成立

示例:

package com.xzit.assign; /** * 关系运算符,最终对2个操作数进行运算得到boolean类型结果 * @author SPIC * */ public class RelationalOperator { public static void main(String[] args) { int mAge = 34 ; int fAge = 40 ; int chiAge = 4 ; mAge++; boolean bool0 = mAge > fAge ; System.out.println("妈妈的年龄大于爸爸的年龄吗?"+bool0); boolean bool2 = mAge <= fAge; System.out.println("妈妈的年龄小于等于爸爸的年龄吗?"+bool2); System.out.println("妈妈的年龄加上孩子的年龄大于爸爸的年龄吗?"+((mAge+chiAge)>fAge)); System.out.println("妈妈年龄加上6岁是否和爸爸年龄相同"+((mAge+6)==fAge)); } }

5. 逻辑运算符

逻辑运算符用来连接boolean类型变量、常亮或关系表达式计算后得到boolean结果

&& 逻辑与,相当于“并且”|| 逻辑或,相当于“或者”!逻辑非,boolean结果取反

&&用法: True && true 结果为true True && false 结果为false False && false 结果为false

||用法: True || true 结果为true True || false 结果为true False || true 结果为true False || false 结果为false

!用法 !true 结果为false !false 结果为true

示例代码:

package com.xzit.assign; /** * 逻辑运算符(&&,|| ,!) * @author SPIC * */ public class LogicOperator { public static void main(String[] args) { // TODO Auto-generated method stub /** * 逻辑与:&&,必须是左侧和右侧计算结果都为true,结果才是true * 否则为false */ int groupOne = 34; int groupTwo = 41; int groupThree= 37; boolean bool = groupTwo > groupOne && groupTwo < groupThree; System.out.println(bool); // 第一小组小于第二小组并且小于第三小组人数 System.out.println(groupOne < groupTwo && groupOne < groupThree); /** * 逻辑或 ||,只要是左侧或右侧计算结果为true,结果就是true * 左右都为false最后结果才为false */ /** * boolean bool2 = false ; * bool2 = groupThree > groupOne || groupThree > groupTwo; */ boolean bool2 = groupThree > groupOne || groupThree > groupTwo; System.out.println(bool2); System.out.println(groupOne > groupTwo || groupOne > groupThree); /** * 逻辑非!,对一个布尔结果进行取反操作 */ System.out.println(!true); System.out.println(!false); System.out.println(!!true); System.out.println(!((23+34) > 70) && (1 != 2)); int apple = 50, peach = 49,banana = 48; boolean bool3 = peach < apple && peach == ++banana; System.out.println(bool3); System.out.println(banana); /** * 逻辑与和逻辑或 运算符的短路现象 * 程序语句在执行时,从左向右开始执行,当左侧判断为false时 * 整条语句都能判定为false,所以为了节省资源 * 右侧的语句就不执行。 */ } }

6. 按位运算符

按位运算符是将数据在内存中二进制存储按照位运算计算得出最终结果

& 按位与相当于并且(对整形和布尔计算)| 按位或相当于或者(对整形和布尔计算)~ 按位非(只对整形计算)^ 按位异或(对整形和布尔计算)

& 对boolean运算 True & true 结果为true false & false 结果为false True & false 结果为false

& 对整数计算 如果2个整数对应位都是1则结果为1,否则为0 1 并 1结果为 1 1 并 0结果为 0 0 并 1结果为 0 0 并 0结果为 0

| 对boolean运算 True | true 结果为true True | false 结果为true false | false 结果为false

| 对整数运算 两个数对应位只要有一个为1则为1,否则为0 1 并 1 结果为 1 1 并 0 结果为 1 0 并 1 结果为 1 0 并 0 结果为 0

~ 对一个整数按位运算 如果位为0,结果为1,如果位为1,结果为0

^ 对boolean运算 2个布尔表达式计算结果相同则最终结果为false,否则为true False ^ false 结果为 false True ^ ture 结果为 false False ^ true 结果为true True ^ false 结果为true

^ 对整数运算 对2个数按位对应比较,相同则为0,不同则为1 0 ^ 0 结果为 0 1 ^ 1 结果为 0 1 ^ 0 结果为 1 0 ^ 1 结果为 1

示例代码:

package com.xzit.assign; public class BitOperator { public static void main(String[] args) { /** * 按位与 &,不短路底层按位进行计算 */ // 对布尔进行计算 int n = 5, m = 6, k = 7; boolean bool = m < n & m == --k;// 按位与 逻辑与 不同之处是前面表达式即使为false,后面仍然被计算 System.out.println(bool); System.out.println(k); /** * 按位或 | ,不短路底层按位进行计算 */ // 对布尔进行计算 boolean bool2 = m > n | ++n == m++; System.out.println(bool2); System.out.println(n++); System.out.println(--m); System.out.println(n); /** * 按位与对整数进行计算 */ System.out.println("5 和 4 按位计算结果"+(5 & 4)); // 4 二进制 0 0100 // 5 二进制 0 0101 // 计算结果 0 0100 System.out.println("-5 和 5 计算结果"+(-5 & 5)); // -5 1 1011 // 5 0 0101 // 0 0001 按位计算结果 /** * 按位非操作,对一个整数进行按位计算,如果当前位是1则为0,如果是0则为1 * 按位非不能对布尔进行操作 */ System.out.println("5的按位非计算结果为"+ ~5); // 5 0 0101 // 按位取反 1 1010 System.out.println("-6按位非计算结果为"+ ~-6); /** * 按位异或 ^ ,对布尔进行计算,两边表达式相同为false,不同为true */ System.out.println("true 异或 true 结果为 false "+(1 == 1 ^ 3 > 2)); System.out.println("false 异或 false 结果为 false "+(1 > 2 ^ 3 == 2)); System.out.println("true 异或 false 结果为 true "+(1 == 1 ^ 3 < 2)); System.out.println("false 异或 true 结果为 true "+(1 != 1 ^ 3 > 2)); /** * 按位异或 ^ ,对整数进行计算,对应位0 ^ 0 结果为 0;1 ^ 1 结果为0;否则为1 */ System.out.println("5 异或 6 计算结果 "+(5 ^ 6)); /** * 5 0 0101 * 6 0 0110 * 0 0011 异或按位计算结果 */ } }

7. 特殊运算符——移位运算符

移位运算符:

<< value << num (左移) >> value >> num (右移) >>> value >>> num (无符号右移)

new 只用作创建某个引用数据类型的对象

. 某对象对属性或方法的引用访问符号 ( ) 包围被优先运算的表达式或方法标志

[ ] 数据类型数据的标志

Instanceof 判断某对象或引用是否属于某种类型

移位运算符:

<< 左移运算符

丢弃最高位, 0 补最低位

移动的位数超过了该类型的最大位数,则对移动的位数取模(比如,整数最高位数32位,要移动35位,就用35除以32,得出最终要移动的位数

在数字都没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移 n 位就相当于乘以2的 n次方

>> 右移运算符

符号不变,左边不上符号位

按二进制形式把所有的位数向右移动对应的位数,低位移出(含舍弃),高位的空位补符号位,即正数补零,负数补一

右移一位相当于除 2 ,右移 n 位相当于除以 2 的 n 次方

>>> 无符号右移运算符

忽略符号位扩展, 0 补最高位

无符号右移规则和右移运算是一样的,只是填充时不管左边的数字是正是负都用 0 来填充,无符号右移运算只针对负数计算,因为对于正数来说这种运算没有意义

示例代码:

package com.xzit.assign; public class MoveBitOperator { public static void main(String[] args) { // TODO Auto-generated method stub /** * 左移运算- << */ int n = 2; System.out.println( n + " 左移 2 位的结果是 " + (n << 3)); /** * 2 0000 0010 * 0001 0000 结果为16 * 移动位数超出最大位限制(实际要移动的位数 % 32) */ System.out.println( n + " 左移34位的结果是 " + ( n << 34)); System.out.println( n + " 左移34位的结果是 " + ( n << 34 % 32)); /** * 右移运算 */ int m = 5 ; System.out.println( m + " 向右移动2位,结果是 " + ( m >> 2)); /** * 5 0 0101 * 0 0001 计算结果 */ System.out.println( -9 + " 向右移动2位,结果是 " + ( -9 >> 2)); System.out.println( -9 + " 向右无符号移动2位,结果是 " + ( -9 >>> 2)); } }

其他特殊运算符的代码示例:

package com.xzit.assign; import java.util.Scanner; /** * 特殊运算符 * @author SPIC * */ public class OtherOperator { public static void main(String[] args) { // TODO Auto-generated method stub // new 运算符,用来新建 Scanner in = new Scanner(System.in); // . 点号运算符,用来访问对象的属性或方法,或者表示常数的小数标志 System.out.print("输入一个整数回车:"); int a = in.nextInt(); System.out.println(a); // ( ) 典型的方法标志,在定义方法或调用方法是必需提供 // [ ] 通常用来标识数组 // intanceof 判断某个对象是否属于某个类型的运算符关键字 boolean bool = in instanceof Scanner; System.out.println(bool); } }
最新回复(0)