Java的基本概念(2)运算符

本文详细介绍了Java中的运算符和表达式,包括算术运算符、字符串连接、字符运算、赋值运算符、关系运算符、逻辑运算符以及三元运算符的使用。通过实例展示了不同类型运算符的工作原理和应用场景,同时强调了类型转换、短路逻辑运算符的特点及其在实际编程中的应用。
摘要由CSDN通过智能技术生成

一:运算符和表达式

Ⅰ:运算符:
对字面量或者变量进行操作的符号
Ⅱ:表达式
用运算符把字面量或者变量连接起来,符合Java的语法的式子,就可以成为表达式
不同运算符连接的表达式体现的是不同类型的表达式
Ⅲ:举例说明
int a = 10;
int b = 20;
int c = a+ b;
+ :是运算符,并且是算术运算符
a+b : 是表达式,由于+是算数运算符,所以这个表达式叫算数运算符

①:算数运算符(arithmetic operator)

public class ArithmeticOperator {
    public static void main(String[] args) {
        //+
        System.out.println(5+2); //7
        //-
        System.out.println(5-2); //3
        //* shift + 8
        System.out.println(5*2); //10
        // 除 /
        System.out.println(5/2);  //2 取商,不要余数
        /*
        如果由小数在其内参与运算会出现数字不准确
         */
         // %
        System.out.println(5%2); //1 取的是余数,不要商
    }
}

1.2,除跟取模

public class ArithmeticOperatorDemo01 {

    public static void main(String[] args) {
        // 除法
        /*
        1、整数参与计算,结果只能得到整数
        2、小数参与计算,结果可能不是精确的,如果需要精确计算,需要用到后面的知识
         */
        System.out.println( 10  / 2); // 5
        System.out.println( 10  / 3 ); // 3
        System.out.println(10.0 / 3); //3.3333333333


        //取模,实际上也是除法运算,只不过得到的是余数
        System.out.println( 10 % 2); //0
        System.out.println(10 % 3); //1

        //场景
        //用来判断 A是否可以被B整除
        //可以判断该数是否为整数
    }
}

1.3,练习

import java.util.Scanner;

public class ArithmeticOperatorTest {
    public static void main(String[] args) {
        /*
        键盘录入一个三位数,将他拆分为个位数、十位数,百位后,打印在控制台
         */
        Scanner input = new Scanner(System.in);
        System.out.println("请输入这个三位数");
        int nextInt = input.nextInt();
        int  ge =  nextInt % 10;
        System.out.println("这个三位数的个位是:" + ge);
        int  shi =  nextInt /  10 % 10;
        System.out.println("这个三位数的十位是:" + shi);
        int  bai =  nextInt / 100 % 10;
        System.out.println("这个三位数的百位是:" + bai);

    }
}

1.4:"+"的三种情况

1.4.1:数字相加

  • 数字进行运算的时候,数据类型不一致的时候,需要转换成一致的进行运算
  • 隐式转换:(自动类型提升)
  • ·取值范围小的数值转成取值范围大的数值
    隐式转换规则
    取值范围小的,和取值范围大的进行计算,小的会先提升为大的,在进行计算
    byte\short\char类型的数据在计算的时候,会自动提升为int类型,在计算
    数据类型不一致的时候,是不可以进行计算的
    byte–>short–>int–>long–>float–>double
//练习
	byte b1 = 10;
	byte b2 = 20;
	数据类型/int   result = b1 + b2; 

	int i = 10;
	long n 100L;
	double d = 20.0;
	数据类型/double  result = i + n + d;

	byte b = 10;
	short s = 20;
	long n = 100L;
	数据类型/long  result = b + s + n
  • 强制转换
    如果把一个取值范围大的数值,赋值给取值范围小的变量,是不允许赋值的,如果一定要做就需要加入强制转换
    格式:目标数据类型 变量名 = (目标数据类型)被强转的数据
    eg: int a = 300
    byte b =(byte) a;
  • 取值范围大的数值转换成取值范围小的数值
//练习
	public class ArithmeticOperatorDemo02 {
    public static void main(String[] args) {
    //如果数据过大,进行转换就会出现错误
        byte b1 = 10;
        byte b2 = 20;
        byte result = (byte) (b1 + b2);
        System.out.println(result); //30
    }
}

1.4.2:字符串相加

  • 字符串"+" 操作
    当”+“ 操作中出现字符串,这个”+“就是字符串连接符,而不是算数运算符了,会将前后拼接,产生一个新的字符串
//练习
	System.out.println(3.7+"abc"); //3.7abc
	System.out.println("abc"+true); //abctrue
	System.out.println('中' + "abc" +true); //中abctrue
	------------------------------------------------------
	int age = 18;
	System.out.println("我的年龄是" + age + "岁"); //我的年龄是18岁
	System.out.println("我的年龄是" + "age" + "岁"); //我的年龄是age岁
	------------------------------------------------------
	System.out.println(1+2+"abc"+2+1); //3abc21	

1.4.3:字符相加
计算规则

  • 当 字符 + 字符 时,会把字符通过ASCLL码表查询到对应的数字进行计算
  • 当 字符 + 数字 时,会把字符通过ASCLL码表查询到对应的数字进行计算
//练习
 	a = 97;
 	A = 65;
 	------------------------------------
 	看代码说结果
 	System.out.println(1 + 'a'); //98
 	System.out.println('a' + "abc"); //aabc

总结:/ 和 % 的区别:两个数据做除法,/ 取结果的商,% 取结果的余数,整数操作只能得到整数,要想得到小数,必须有浮点数参与运算

②:自增自减

基本用法:

符号作用说明
++变量的值加1
- -变量的值减1

注意事项

++和–可以出现在前面,可以出现在后面
++和 – 无论是放在前面还是后面,单独写一行结果是一样的
public class ArithmeticOperatorDemo04 {
    public static void main(String[] args) {
        //++和--
        int a = 10;
        a++;
        System.out.println(a); //11
        ++a;
        System.out.println(a); //12
        a--;
        System.out.println(a); //11
        --a;
        System.out.println(a); //10
    }
}
参与计算
int a = 10;
int b = a++; 先用后加  a = 11; b = 10;

int a = 10;
int b = ++a  先加后用   a  = 11 ; b = 11;

//练习
public class ArithmeticOperatorDemo04 {
    public static void main(String[] args) {
        int x = 10;
        int y = x++;
        int z = ++x;
        System.out.println("x"+ x);//12
        System.out.println("y"+ y);//10
        System.out.println("z"+ z);//12
    }
}

③:赋值运算符

符号作用说明
=赋值int a = 10 将10赋值给变量a
+=加后赋值a += b 将a+b的值给a
-=减后赋值a -= b 将a-b的值给a
*=乘后赋值a = b 将ab的值给a
/=除后赋值a /= b 将a/b的商给a
%=取余后赋值a %= b 将a/b的余数给a
public class ArithmeticOperatorDemo01 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        a += b; //相当于 a = a + b
        System.out.println(a); //30
        System.out.println(b); //20

        //强转类型
        short s = 10;
         s += 1; //相当于 s = (short)(s + 1);
        System.out.println(s); //11

    }
}
注意事项:拓展的赋值运算符隐含了强制类型转换

④:关系运算符

关系运算也叫比较运算符
符号说明
==a==b 判断a和b的值是否相等,成立为true,不成立为false
!=a!=b 判断a和b的值是否不相等,成立为true,不成立为false
>a>b 判断a是否大于b,成立为true,不成立为false
>=a>=b 判断a是否大于等于b,成立为true,不成立为false
<a<b 判断a是否小于b,成立为true,不成立为false
<=a<=b 判断a是否小于等于b,成立为true,不成立为false
注意事项:关系运算符的结果是boolean类型,要么是true,要么是false,千万不要把"==" 写成"="
//练习
import java.util.Scanner;

public class practice {
    public static void main(String[] args) {
        /*
        某一次你跟你的相亲对象在餐厅相亲,这个时候需要比你你们的时髦度
        来判断你们是否能在一起、如果你的时髦杜大于女方时髦度,就输出true,标示能在一起
       注意:时髦度只能在(0-9),不能输入其他的
         */
        Scanner input = new Scanner(System.in);
        System.out.println("请输入你的时髦度");
        int my = input.nextInt();
        System.out.println("请输入女方的时髦度");
        int girl = input.nextInt();
        boolean result =  my  >  girl ;
        System.out.println(result);
    }
}

⑤:逻辑运算符

5.1:什么是逻辑运算符?
在数学中,一个数据X,大于5,小于15,我们可以表示: 5<x<15
在Java中需要解析拆解,在进行合并
拆解为 : x < 15 和 x > 5
合并后: x >5 & x< 15

符号作用说明
&逻辑与(且)并且,两边都为真,结果才为真 两边都满足
|逻辑或或者,两边都为假,结果才为假 两边满足一个
^逻辑异或相同为false,不同为true
!逻辑非取反
public class LogicOperator {
    public static void main(String[] args) {
        //并且 &
        System.out.println(true & true); //true
        System.out.println(true & false); // false
        System.out.println(false & false); //false
        System.out.println(true &  false); //false

        //或者 |
        System.out.println(true | true); //true
        System.out.println(true | false); // true
        System.out.println(false | false); // false
        System.out.println(false | true); // true

		//异或 ^
		System.out.println(true ^ true); //false
        System.out.println(true ^ false); // true
        System.out.println(false ^ false); // false
        System.out.println(false ^ true); // true

		//非  取反 !
		//提示:取反的感叹号不要写多次,要么不写,要么只写一次
		System.out.println(!true); //false
        System.out.println(!false); // true
     
    }
}

⑥:短路逻辑运算符

符号作用说明
&&短路与结果和&相同,但是有短路效果
II短路或结果和 I 相同,但是有短路效果
public class LogicOperatorDemo01 {
    public static void main(String[] args) {
        /*
        &&
        结果跟&是一样的,两边都为真结果为真
         */
        System.out.println(true && true); //true
        System.out.println(false && true); //false
        System.out.println(false && false);//false
        System.out.println(true && false);//false

        /*
        ||
        结果跟|是一样的,两边都为假结果才为假
         */
        System.out.println(true || true); //true
        System.out.println(false || true); //true
        System.out.println(false || false);//false
        System.out.println(true || false);//true
    }
}

短路逻辑运算符拥有短路效果
当左边的表达式能确定最终结果,右边的表达式就不会执行

int a = 10;
int b = 10;
boolean result = ++a < 5 && ++b < 5;
System.out.println(result); //false
System.out.println(a); //11
System.out.println(b); //10

注意事项

  • & | :无论左边表达式是true还是false,右边表达式都执行
  • && || :如果左边能确定整个表达式的结果,右边则不执行
  • && :左边表达式为false,右边不管真假,结果一定为false
  • | |:左边表达式为true,右边不管真假,结果一定为true
  • 短路语,在左边执行,右边不执行,大大提高了效率
  • 最常用的逻辑运算符:&& || !
//练习
import java.util.Scanner;

public class Practice {
    public static void main(String[] args) {
        /*
        数字6是一个真正的伟大的数字,键盘录入两个整数
        如果其中一个为6,最终的结果为true
        如果他们的和为6的倍数,最终结果输出true
        其他情况都是false
         */
        Scanner input = new  Scanner(System.in);
        System.out.println("请输入第一个整数");
        int number1 = input.nextInt();
        System.out.println("请输入第二个整数");
        int number2 = input.nextInt();
        boolean result = number1 == 6 || number2 ==6 || (number1 + number2) % 6 ==0;
        System.out.println(result);
    }
}

⑦:三元运算符

三元运算符也称三元表达式
格式为: 关系表达式 ? 表达式1 : 表达式2
范例:

int a = 10;
int b = 20;
int result =  a > b ? a : b ;
System.out.println(result); // b = 20大

注意事项
首先计算关系表达式的值
如果值为true,则表达式1的值大
如果为false,则表达式2的值大

//练习
import java.util.Scanner;

public class LogicOperatorDemo01 {
    public static void main(String[] args) {
        /*
        键盘录入随意两只老虎的体重并比较大小,最大的老虎是多少斤
         */
        Scanner input = new Scanner(System.in);
        System.out.println("请输入第一只老虎的体重");
        int tiger1 = input.nextInt();
        System.out.println("请输入第二只老虎的体重");
        int tiger2 = input.nextInt();

        int result = tiger1 > tiger2 ? tiger1 : tiger2;
        System.out.println("老虎体重最大是" +  result  + "斤");

    }
}
public class LogicOperatorDemo02 {
    public static void main(String[] args) {
        /*
        定义三个和尚的身高,请用程序输出最高
         */
        int height1 = 185;
        int height2 = 196;
        int height3 = 201;
        int max = (height1 > height2 ? height1 : height2) > height3 ?
                (height1 > height2 ? height1 : height2) : height3 ;
        System.out.println(max);

        //或者这样写
        第一种看不懂的可以看第二种
        int max1 = height1 > height2 ? height1 : height2;
        int max2 = max1 > height3 ? max1 : height3;
        System.out.println(max2);
    }
}

⑧:源码跟反码补码

源码:十进制数据的二进制的表现形式,最左边是符号位,0为正,1为负数

反码:正数的补码反码是其本身,负数的反码是符号位,不变,其余位,取反

补码:正数的补码是其本身,负数的补码是在其反码的基础上+1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值