运算符

前言

文章内容输出来源:拉勾教育JAVA就业训练营
总目录跳转链接:总目录
如有侵权请联系本人
邮箱:xiaogueika@tom.com



算术运算符

  • +表示加法运算符
  • -表示减法运算符
  • *表示乘法运算符
  • /表示除法运算符
  • %表示取模/取余运算符

算术运算符声明和使用:

package cn.cyh.test;
/**
 * 编程实现算术运算符的使用
 * @author cyh
 * @version 2020/12/9 21:37
 */
public class ArithmeticTest {
    public static void main(String[] args) {
        //1.声明两个int类型的变量并初始化
        //int ia = 6, ib = 2;   //表示声明两个int类型的变量ia和ib,不推荐使用
        int ia = 6;             //推荐该万式,提高了代码的可读性
        int ib = 2;
        System.out.println("ia = "+ ia);
        System.out.println("ib = "+ ib);
        System.out.println("------------------------------------");
        //2.使用上述变量实现算术运算符的使用    +   -   *   /   %
        System.out.println("ia + ib = " + (ia + ib));
        System.out.println("ia - ib = " + (ia - ib));
        System.out.println("ia * ib = " + (ia * ib));
        System.out.println("ia / ib = " + (ia / ib));
        System.out.println("ia % ib = " + (ia % ib));
    }
}

注意事项

  • 3.1 当两个整数相除时结果只保留整数部分,丢弃小数部分
    System.out.println(5 / 2);
  • 3.2 若希望保留小数部分该如何处理?
  • 处理方式一:使用强制类型转换将其中一个操作数转换为doub1e类型再运算即可
    System.out.println((double)5 / 2);
  • 处理方式二:让其中一个操作数乘以1.0即可 (推荐)
    System.out.println(5 * 1.0 / 2);
  • 3.3 0不能做除数
    System.out.println(5 / 0);//java.lang.ArithmeticException(算数异常): / by zero
    System.out.println(5 / 0.0);//Infinity 无穷
    System.out.println(0 / 0.0);//NaN 非数字

案例题目

提示用户输入正整数类型的秒数,拆分秒数后输出x小时x分x秒。
如:输入7199,输出1小时59分59秒。

package cn.cyh.test;
import java.util.Scanner;
/**
 * 编程使用算术运算符实现秒数的拆分
 * @author cyh
 * @version 2020/12/9 21:57
 */
public class ArithmeticTimeTest {
    public static void main(String[] args) {
        //1.提示用户输入一个正整数的秒数并使用变量记录
        System.out.print("请输入一个正整数秒数:");
        Scanner scanner =new Scanner(System.in);
        int num =scanner.nextInt();
        //2.将正整数的秒数拆分为时分秒后并使用变量记录
        int hour = num / 3600;      //时
        int min = num % 3600 / 60;  //分
        int sec = num % 60;         //秒
        //3.打印最终的拆分结果
        System.out.println(num + "秒转换为" + hour + "小时" + min +"分钟" + sec + "秒");
    }
}

字符串连接运算符

+可以实现字符串的连接。同时可以实现字符串与其他数据类型“相连"。

		//+既可以作为子符串连接行,又可以作为加法运算行
        //只要+两边的操作数中有一个操作数是字符串类型,则该+就被当做字符串连接符处理,否则当做加法
        System.out.println(hour + min + sec);       //8
        System.out.println(hour + min + sec + "");  //8
        System.out.println(hour + min + "" + sec);  //26
        System.out.println(hour + "" +min + sec);   //116
        System.out.println("" +hour + min + sec);   //116
        System.out.println("" +(hour + min + sec)); //8

关系/比较运算符

  `>`表示是否大于运算符		 	`>=`表示是否大于等于运算符
  `<`表示是否小于运算符			`<=`表示是否小于等于运算符
  `==`表示是否等于运算符		    `!=`表示是否不等于运算符
/**
 * 编程实现关系运算符的使用
 * @author cyh
 * @create 2020/12/10 8:52
 */
public class RelationTest {
    public static void main(String[] args) {
        //1.声明两个int类型的变量并初始化
        int ia=5;
        int ib=2;
        //2.使用变量实现关系运算符的使用并打印结果
        System.out.println("ia >  ib = "+(ia > ib));
        System.out.println("ia >= ib = "+(ia >= ib));
        System.out.println("ia <  ib = "+(ia < ib));
        System.out.println("ia <= ib = "+(ia <= ib));
        System.out.println("ia == ib = "+(ia == ib));
        System.out.println("ia != ib = "+(ia != ib));
    }
}

案例题目

提示用户输入一个整数,使用关系运算符判断该整数是否为负数,若是则打印true,若不是则打印false

import java.util.Scanner;

/**
 * 编程使用关系运算符实现负数的判断
 * @author Administrator
 * @create 2020/12/10 8:57
 */
public class RelationJudgeTest {
    public static void main(String[] args) {
        //1.提示用户输入一个整数并使用变量记录
        System.out.println("请输入一个整数:");
        Scanner scanner=new Scanner(System.in);
        int num = scanner.nextInt();
        //2.判断该整数是否为负数并打印
        System.out.println("num = " + num);
        System.out.println("是否为负数:" + (num < 0));
    }
}

自增减运算符

  • ++表示自增运算符,用于使得当前变量自身的数值加1的效果
  • --表示自减运算符,用于使得当前变量自身的数值减1的效果
/**
 *  编程实现自增减运算符的使用
 * @author Administrator
 * @create 2020/12/10 9:08
 */
public class SelfTest {
    public static void main(String[] args) {
        //1.声明一个int类型的变量并初始化
        int ia = 10;
        System.out.println("ia = " + ia);
        System.out.println("------------------------------");
        //2.实现目增减运算符的使用
        //表示让变量ia自身的数值加1,并覆盖该变量原来的数值
        ia++;
        System.out.println("ia++ = " + ia);
        ++ia;
        System.out.println("++ia = " + ia);
        --ia;
        System.out.println("--ia = " + ia);
        ia--;
        System.out.println("ia-- = " + ia);
        System.out.println("------------------------------");
        //3.简单的变换
        //其中ia++这个整体叫做表达式   其中ia叫做操作数/变量
        //也就是ia++和ia表示不同的含义,因此所占的内存空间应该不同
        //下面的代码是在打印表达式的结果
        //后++表示先让变量ia的数值作为整个表达式的最终结果,然后再让ia变量自身的数值加1
        System.out.println(ia++);           //10
        System.out.println("ia = " + ia);   //11
        //前++表示先让变量自身的数值加1,然后再让变量的数值作为整个表达式的结果
        System.out.println(++ia);           //12
        System.out.println("ia = " + ia);   //12
    }
}

笔试考点

把代码加到上面代码块里,猜猜他们值等于多少,答案向右划

		int ib = ia++;
        System.out.println("ib = " + ib);																	//12
        System.out.println("ia = " + ia);																	//13
        int ic = ++ia;
        System.out.println("ic = " + ic);																	//14
        System.out.println("ia = " + ia);																	//14
        //                 14  +   16
        System.out.println(ia++ + ++ia);																	//30
        System.out.println("ia = " + ia);																	//16

逻辑运算符

  • &&表示逻辑与运算符,相当于“并且”,同真为真,一假为假。
  • ||表示逻辑或运算符,相当于“或者”,一真为真,同假为假。
  • 表示逻辑非运算符,相当于“取反”,真为假,假为真。
  • 逻辑运算符的操作数均为boolean表达式。
/**
 * 编程实现逻辑运算符的使用
 * @author cyh
 * @create 2020/12/10 9:34
 */
public class LogicTest {
    public static void main(String[] args) {
        // 1.声明两个boolean类型的变量并初始化
        boolean b1 = true;
        boolean b2 = false;
        System.out.println("b1 = " + b1);
        System.out.println("b2 = " + b2);
        System.out.println("b1 && b2 = "+(b1 && b2));  	//false	并且
        System.out.println("b1 || b2 = "+(b1 || b2));  	//true	或者
        System.out.println("!b1 = "+!b1);				//取反
        System.out.println("!b2 = "+!b2);
    }
}

逻辑运算符的短路特性

  • 对于逻辑与运算符来说,若第一个表达式为假则结果为假,此时跳过第二个表达式;
  • 对于逻辑或运算符来说,若第一个表达式为真则结果为真,此时跳过第二个表达式;
 		//2.测试一下短路特性
        int ia = 3;
        int ib = 5;
        //对于逻辑与运算符来说,若第一个条件为假则整个表达式为假,此时跳过第二个表达式不执行
        boolean b4 = (++ia == 3) && (++ib == 5);
        System.out.println("b4 = " + b4);   //false
        System.out.println("ia = " + ia);   //4 ++ia条件不成立短路
        System.out.println("ib = " + ib);   //5 因为++ia条件不成立短路,++ib不执行
        //对于逻辑或运算符来说,若第一个条件为真则整个表达式为真,此时跳过第二个表达式不执行
        boolean b5 = (++ia == 5) || (++ib == 5);
        System.out.println("b4 = " + b4);   //true
        System.out.println("ia = " + ia);   //5
        System.out.println("ib = " + ib);   //5

案例题目

提示用户输入一个正整数,使用逻辑运算符判断该正整数是否为三位数,若是则打印true,否则打印false

import java.util.Scanner;
/**
 * 编程使用逻辑运算符判断三位数
 * @author cyh
 * @create 2020/12/10 9:50
 */
public class LogicJudgeTest {
    public static void main(String[] args) {
        //1.提示用户输入一个正整数并使用变量记录
        System.out.println("请输入一个正整数");
        Scanner scanner =new Scanner(System.in);
        int num = scanner.nextInt();
        //2.使用逻辑运算符判断是否为三位数并打印  >=100   <=999   &&
        //System.out.printin(100<=num <=999);   错误:二元运算符’<=’的操作数类型错误
        //逻辑运算符主要用于连接多个关系运算符作为最终运算的表达式,用于实现多条件的连接
        System.out.println(100 <= num && num <=999);
    }
}

条件/三目运算符

  • 条件表达式?表达式1:表达式2
  • 判断条件表达式是否成立,若成立则执行表达式1,否则执行表达式2。
		// 使用三目运算符来判断是否是三位数
 		System.out.println(num + ((100 <= num && num <=999)?"是三位数":"不是三位数"));

案例题目

提示用户输入两个整数,使用三目运算符找到最大值并打印出来。

import java.util.Scanner;
/**
 * 编程使用三目运算符查找最大值
 * @author cyh
 * @create 2020/12/10 10:01
 */
public class ThreeKye {
    public static void main(String[] args) {
        //1.提示用户输入两个整数并使用变量记录
        System.out.println("请输入两个整数:");
        Scanner scanner =new Scanner(System.in);
        int ia =scanner.nextInt();
        int ib =scanner.nextInt();
        //2.使用三目运算符找到最大值并打印
        System.out.println("最大值是:"+(ia > ib ? ia :ib));
    }
}

赋值运算符

  • =表示赋值运算符,用于将=右边的数据赋值给=左边的变量,覆盖变量原来的数值。
  • 赋值表达式本身也有值,其本身之值即为所赋之值。
  • +=-=*=/=、…
/**
 * 赋值运算符的使用
 * @author cyh
 * @create 2020/12/10 10:07
 */
public class AssignTest {
    public static void main(String[] args) {
        //1.声明一个int类型的变量并初始化
        int ia = 3;
        System.out.println("ia = " + ia);
        System.out.println("--------------------");
        //2.简单赋值运算符的使用
        //表示将数据5赋值给变量ia并且覆盖变量ia原来的数值值
        ia = 5;
        System.out.println("ia = " + ia);
        int ib = ia = 6;
        System.out.println("ia = " + ia);
        System.out.println("ib = " + ib);
        int ic;
        ic = ib =ia = 8;
        System.out.println("ia = " + ia); //ia = 8
        System.out.println("ib = " + ib); //ib = 8
        System.out.println("ic = " + ic); //ic = 8
        System.out.println("--------------------");
        //3.复合运算值运算符的使用
        //ia = ia + 2; 目前推荐使用该写法
        ia += 2;
        System.out.println("ia = " + ia);
    }
}

笔试考点

笔试考点1:

        byte b1 = 10;
        System.out.println("b1 = " + b1);
        //b1 = b1 +2;   错误:不兼容的类型: 从int转换到byte可能会有损失    byte +iht 相加结果还是int类型
        //b1 = b1 +(byte)2;   错误:不兼容的类型: 从int转换到byte可能会有损失    byte + byte 相加结果还是int类型编详器优化
        //b1 =(byte)(b1 +2);  强制类型转换,将int类型转换为byte
        b1 += 2;    //真正等价于b1=(byte)(bl+2);
        System.out.println("b1 = " + b1);

笔试考点2:

        ia == 2;  //- 表示判断变量ia的数值是否等于2
        2 == ia;  //- 表示判断2是否等于变量ia的数值,从结果上来说等价,推荐该方式
        ia == 2;  //- 表示将2赋值给变量ia,覆盖变量ia原来的数值
        2 =ia;    //- 编译报错 错误:意外的类型

移位运算符(了解)

  • <<左移运算符,用于将数据的二进制位向左移动,右边使用0补充
  • >>有移运算符,用于将数据的二进制位向右移动,左边使用符号位补充
  • >>>表示逻辑右移运算符,用于将数据的二进制位向右移动,左边使用0补充。
/**
 * 编程实现移位运算符的使用
 * @author cyh
 * @create 2020/12/10 10:34
 */
public class MoveBitTest {
    public static void main(String[] args) {
        //1.声明一个byte类型的变量并初始化
        byte b1 = 13;
        System.out.println("b1 = " + b1);
        System.out.println("---------------------------------");
        //2.移位运算符的使用
        //13的二进制是:0000 1101 =>左移1位的结果是: 0001 1010 => 换算为十进制整数是:26
        //byte b2 = b1 << 1;    错误:不兼容的类型:从int转换到byte可能会有损失 自动提升为int类型,也就是是32位二进制
        byte b2 =(byte)(b1 << 1);
        System.out.println("b2 = " +b2);
        System.out.println("b1 << 1 = "+(b1 << 1));  //左移1位相当于当前整数的数值*2
        System.out.println("b1 << 2 = "+(b1 << 2));  //左移1位相当于当前整数的数值*4
        System.out.println("---------------------------------");
        //13的二进制是:0000 1101 =>右移1位的结果是:0000 0110 => 换算为十进制整数是:6
        System.out.println("b1 >> 1 = "+(b1 >> 1));  //左移1位相当于当前整数的数值/2
        System.out.println("b1 >> 2 = "+(b1 >> 2));  //左移1位相当于当前整数的数值/4
        System.out.println("---------------------------------");
        //逻辑右移 对于非负数来说,逻辑右移和右移的效果是一致
        System.out.println(b1 >>> 2);

    }
}

位运算符(了解)

  • &表示按位与运算符,按照二进制位进行与运算,同1为1,一0为0.
  • |表示按位或运算符,按照二进制位进行或运算,一1为1,同0为0.
  • ~表示按位取反运算符,按照二进制位进行取反,1为0,0为1.
  • ^表示按位异或运算符,按照二进制位进行异或运算,同为0,不同为1.
/**
 * 编程实现位运算符的使用
 * @author Administrator
 * @create 2020/12/10 10:52
 */
public class BitTest {
    public static void main(String[] args) {
        //1.声明两个byte类型的变量并初始化
        byte b1 = 11;
        byte b2 = 13;
        System.out.println("b1 = " + b1);
        System.out.println("b2 = " + b2);
        System.out.println("--------------------------------");
        //2.实现位运算符的使用
        //b1的二进制为: 0000 1011
        //b1的二进制为: 0000 1101
        System.out.println("b1 & b2 = "+(b1 & b2)); //按位与:同1为1,一0为0:     0000 1001 => 转为十进制是:9
        System.out.println("b1 | b2 = "+(b1 | b2)); //按位与:一1为1,同0为0:     0000 1111 => 转为十进制是:15
        System.out.println("b1 ^ b2 = "+(b1 ^ b2)); //1按位与:相同为0,不同为1:   0000 0110 => 转为十进制是:6
        System.out.println("~b1 = "+ ~b1);          //按位与:1为0,0为1:        1111 0100 
        //二进制 1111 0100 转为十进制 =>先减1:1111 0011 =>按位取反:0000 1100 =>转为十进制:12=>添加负号:-12
    }
}

运算符的优先级

在这里插入图片描述


知识总结

1.运算符

  • 算术运算符:+ - * / %
  • 字符串连接符:+
  • 关系/比较运算符: > >= < <= == !=
  • 自增减运算符: ++ --
  • 逻辑运算符: && || !
  • 条件/三目运算符:?:
  • 赋值运算符: = += -= *= /=
  • 移位运算符(了解):<< >> >>>
  • 位运算符(了解):& | ^ ~
    运算符的优先级
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值