Java运算符

运算符介绍

  • 运算符介绍

    运算符是一种特殊的符号,用以表示数据的运算 赋值 和比较等

    1. 算术运算符
    2. 位移运算符
    3. 比较运算符
    4. 逻辑运算符
    5. 三元运算符
    6. 赋值运算符

算术运算符在这里插入图片描述

public class ArithmeticOperator {

    //演示算术运算符的使用
    public static void main(String[] args) {

        // / 使用 除法
        System.out.println(10 / 4);//从数学来看是2.5 但计算机是2
        // java 中结果是int 会把0.5去掉
        System.out.println(10.0 / 4);//double  2.5
        double d = 10 / 4;//java中 10 / 4 = 2 ,2-->2.0
        System.out.println(d);//2.0

        // % 取模(取余)使用
        // 在Java中 取模的本质 看一个公式 a % b = a - a / b * b
        // -10 % 3 => -10 -(-10)/ 3 * 3==> -10+9 = -1
        // 10 % 3 => 10 - (10) / -3 *  -3 ==> 10-9= 1
        // -10 % -3 => -10 -(-10) / -3 * -3 ==> -10 + 9 =-1
        System.out.println(10 % 3); // 1
        System.out.println(-10 % 3); // -1
        System.out.println(10 % -3); // 1
        System.out.println(-10 % -3); // -1
        // a % b 当 a 是小数时 公式 = a -(int)a /b *b
        // -10.5 % 3 = -10.5 -(-10)/3*3 = -10.5 -9 = -1.5
        System.out.println(-10.5 % -3); // -1

        // ++ 自增使用
        //如果独立使用i++、++i完全一样的 等价于 i = i + 1;
        int i = 10;
        i++; // 自增 等价于 i = i + 1;
        ++i;//自增 等价于 i = i +1;
        System.out.println("i= " + i);//12
        /*
        作为表达式来使用
        前 ++ : ++i 先自增后赋值
        后 ++ : i++ 先赋值后自增

         */
        int j = 8;
        //int k = ++j; // 等价 j = j+1 ;k=j;
        int k = j++; //等价于 k=j; j=j+1;
        System.out.println("k=" + k + "j=" + j);//k=8 , j=9;





    }
}
  • 案例
public class ArithmeticOperatorExercise03 {
    public static void main(String[] args) {
        //需求:
        //假设还有59天放假,问"合" + j + "个星期零" + k + "天"
        //2.思路
        // 使用 int 变量 days 保存 天数
        // 一个星期是 7 天 days / 7  星期数 零多少天 days % 7
        //输出
        int days = 59;
        int weeks = days / 7 ;
        int leftDays = days % 7;
        System.out.println("合" + weeks + "个星期零" + leftDays + "天");

        double huaShi = 234.6;
        double sheShi = 5.0 / 9 * (huaShi - 100);
        System.out.println("华氏温度为" + huaShi + "对应的摄氏温度"+ sheShi);

    }
}

关系运算符

在这里插入图片描述

public class RelationalOperator {

    public static void main(String[] args) {
        //演示关系运算符的使用

        int a = 9;
        int b = 8;

        System.out.println(a > b);//T
        System.out.println(a >= b);//T
        System.out.println(a <= b);//F
        System.out.println(a < b);//F
        System.out.println(a == b);//F
        System.out.println(a != b);//T
        boolean flag = a > b;

        System.out.println("flag=" + flag);

        //细节
//        关系运算符的结果都是boolean型 要么是true 要么是false
    }
}

逻辑运算符

在这里插入图片描述

public class LogicOperator {

    public static void main(String[] args) {

        //演示逻辑运算符的使用

        //&& 和 & 的案例演示
        int age = 50;
        if (age > 20 && age < 90) {

            System.out.println("ok100");
        }

        //& 使用
        int age1 = 50;
        if (age1 > 20 & age1 < 90) {

            System.out.println("ok100");
        }
        //区别
        int a = 4;
        int b = 9;
        //对于短路与而言,第一个条件为false,后面的条件不会执行
        if (a < 1 && ++b < 50){
            System.out.println("ok300");
        }
        System.out.println("a=" + a + "b=" + b);

        //对于逻辑与而言,第一个条件为false,后面的条件仍然执行
        if (a < 1 & ++b < 50){
            System.out.println("ok400");

        }
        System.out.println(a +" "+ b);
        //短路与 && 更高效
        //逻辑与 & 会判断两遍,
        //开发中,一般使用短路与 &&
    }
}
public class LogicOperator01 {

    public static void main(String[] args) {

        //演示 || 和 | 的使用

        //短路或 ||  如果第一个条件为true ,就不会执行后面的判断
        int age = 50;
        if (age > 20 || age < 30) {

            System.out.println("ok100");
        }

        // 逻辑或 |  如果第一个条件为true ,也会执行后面的判断

        // | 使用
        int age1 = 50;
        if (age1 > 20 | age1 < 30) {

            System.out.println("ok200");
        }


        //开发中一般使用 短路或 || 效率高

        int a = 4;
        int b =9;
        if(a > 1 || ++b > 4){
            System.out.println("ok300");
        }
        System.out.println(a + " " + b);

        if (a > 1 | ++b > 4){
            System.out.println("ok400");
        }
        System.out.println(a + " " + b);

    }
}
public class InverseOperator {

    public static void main(String[] args) {

        // ! 就是非操作 T->F ; F -> T
        System.out.println(60 > 20);//T
        System.out.println(!(60 > 20));//F

        // a ^ b: 叫逻辑异或 ,当 a 和 b 不同时 则结果为True ,否则为False

        boolean b = (10 > 1) ^(3 > 5);
        System.out.println("b=" + b); // F
    }
}

赋值运算符

public class AssignOperator {

    public static void main(String[] args) {

        //演示赋值运算符的使用

        int n1 = 10;
        n1 +=4; //等价于 n1  = n1 +4
        System.out.println(n1);//14
        n1 /=3 ; // n1 = n1 / 3;
        System.out.println(n1);//4

        //复合赋值运算符会进行类型强制转换 byte
        byte b = 3;
        b += 2; //  等价于 b = (byte)(b +2);
        b++; // b = (byte)(b + 1);
        System.out.println(b);
    }
}

三元运算符

  • 基本语法

    条件表达式 ? 表达式1 :表达式2

  • 运算规则

    • 条件表达式为true, 结果为表达式1
    • 条件表达式为false, 结果为表达式2
public class TernaryOperator {

    public static void main(String[] args) {
        //演示三元运算符的用法

        int a = 4;
        int b = 9;

        // 解读
        // a > b 为 false
        // 返回 b--,
        // 先返回b 的值 再 返回 b -1;
        // 返回 9 的结果
        int result = a > b ? a++:b--; // 9
        System.out.println(result); // 9
        System.out.println(a);//4
        System.out.println(b);//8

        //三元运算符细节

        //表达式1 和表达式2要为可以赋给接收变量的类型(或可以自动转换)
        int x = 3;
        int y = 8;
        int res = a > b ? a : b ;

//      int res1 = a > b ? 1.1 : 2.1; //错误的
        double res2 = a > b ? a : b +3; //自动转换 int -->double

        //三元运算符可以转成if-else语句
        if(x>y) {
            a++;
        }else {
            b--;
        }
    }

运算符的优先级

在这里插入图片描述

  1. . () ,{}
  1. 单目运算 – ++
  2. 算术运算符
  3. 位移运算符
  4. 比较运算符
  5. 逻辑运算符
  6. 三元运算符
  7. 赋值运算符

标识符的命名规则和规范

  • 标识符概念

    • java 对各种变量、方法和类的命名时使用的字符序列称之为标识符
    • 凡是自己取名的地方都叫标识符
  • 标识符的命名规则**[必须遵守]**

    • 由26个英文字母 和0-9,_或$组成
    • 数字不能开头 int 3ab =1;//错误
    • 不可以使用关键字和保留字,但能包含关键字和保留字
    • java严格区分大小写,长度不限
    • 标识符不能包含空格。int a b = 90;
  • 标识符命名规范**[更专业]**

    • 包名:多单词组成时所有的字母都小写:aaa.bbb.ccc
    • 类名、接口名:多单词组成时,所有单词的首字母大写:XyyYyyZzz[大驼峰]
    • 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始首字母大写:xxxYyyZzz[小驼峰]
    • 常量名:所有的单词都大写。多单词每个单词用下划线连接:、XXX_YYY_ZZZ
    • 命名规范要时刻遵守,更详细看文档

关键字

在这里插入图片描述

在这里插入图片描述

键盘输入语句

  • 介绍

    在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。

    input.java ,需要一个扫描器对象 就是Sacnner

  • 步骤

    • 导入该类的所在包,java,util.*
    • 创建该类对象(声明变量)
    • 调用里面的功能
    import java.util.Scanner;//表示把java.util下的Scanner类导入
    
    public class Input {
    
        public static void main(String[] args) {
    
            //演示接收用户的输入
            //步骤
            //1.引入Scanner类的包
            //2.创建Scanner 对象
            Scanner myScanner = new Scanner(System.in);
    
            //3.接受用户的输入:使用相关的方法
            System.out.println("请输入名字");
    
            //当程序执行到next 方法时 会等待用户输入~~~~~
            String name = myScanner.next(); //接收用户的输入
            System.out.println("请输入年龄");
            int  age = myScanner.nextInt(); //接收用户的输入
            System.out.println("请输入薪水");
            double sal = myScanner.nextDouble(); //接收用户的输入
    
            System.out.println("人的信息如下:");
    
            System.out.println("名字=" + name + "年龄=" + age
            + "薪水=" + sal);
    
    
        }
    }
    
    

进制

  • 进制介绍
    • 二进制:0、1,满2进1 以0b或0B开头
    • 八进制:0-7 ,满8进1 以数字0开头表示
    • 十进制:0-9 ,满10进1
    • 十六进制:0-9及A(10)-F(15),满16进1 以0x或0X开头

在这里插入图片描述

在这里插入图片描述

进制的转换
  • 其他进制转十进制

    • 二转十

      • 规则从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方

      0b1011=1x20+1x21+0x22+1x23=1+2+0+8=11

    • 八转十

      • 规则从最低位开始,将每个位上的数提取出来,乘以8的(位数-1)次方

      0234=4x80+3x81+2x8^2+=4+24+128=156

    • 十六转十

      • 规则从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方

      0x23A = 10x160+3x161+2x16^2=10+48+512=570

  • 十进制转其他进制

    • 十转二

      • 规则:将该数不断除以二,直到商为零为止,然后将每步得到的余数倒过来,就得到对应的二进制了。

      34 = 0b00100010

    • 十转八

      • 规则:将该数不断除以八,直到商为零为止,然后将每步得到的余数倒过来,就得到对应的八进制了

      34=042

      131=0203

    • 十转十六

      • 规则:将该数不断除以十六,直到商为零为止,然后将每步得到的余数倒过来,就得到对应的十六进制了

      34=0x22

      237=0xED

  • 二进制转其他进制

    • 二进制转八进制

      • 规则:从低位开始,将二进制数的每三位一组,转成对应的八进制数即可

      0b11010101=0325

    • 二级制转十六进制

      • 规则:从低位开始,将二进制数的每四位一组,转成对应的十六进制数即可 1111 —> F

      0b11010101=0xD5

  • 其他进制转二进制

    • 八进制转二进制

      • 规则:将八进制数每一位,转成对应的一个3位的二进制数即可

      0237 = 0b10011111

    • 十六进制转二进制

      • 规则:将十六进制数每一位,转成对应的一个4位的二进制数即可

      0x23b=0b001000111011

位运算

  • 二进制是逢2进1的进制位,0、1是基本算术。
  • 现代的电子计算机技术全部采用的是二进制,因为它只使用0,1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示。二进制数用0和1两个数字及其组合来表示任何数。进位规则逢2进1,数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增
原码 补码 反码(重点 难点)
  • 二进制的最高位是符号位:0表示正数 1表示负数 (0 -> 0, 1 -> -)
  • 正数的原码 反码 补码 都一样
  • 负数的反码 = 它的原码符号位不变 其他位按位取反(0->1 1->0)
  • 负数的补码 = 它的反码 + 1 , 负数的反码 = 负数的补码 - 1
  • 0的反码 补码都是0
  • java没有无符号数 换言之 java的数都是有符号的
  • 在计算机运算的1时候,都是以补码的方式进行运算的
  • 当我们看运算结果的时候 要看它的原码
位运算详解
  • 位运算符
    • java中有7个运算符(&,|,^,~,>>,<<和>>>)
    • 分别是按位与,按位或、按位异或,按位取反
      • 按位与 全1为1,反之为0
      • 按位或 全0为0 ,反之为1
      • 按位异或 不同为1,相同为0
      • 按位取反 0->1 1->0
      • 比如 2&3 =2 ~-2 =
public class BitOperator {

    public static void main(String[] args) {
        //演示位运算

        //先得到2的补码 =》 2 的原码 00000000 00000000 00000000
        //00000010
        //正数的原码、反码、补码一样
        //得到3的补码

        //按位与&
        // 结果 0000000 00000000 00000000 00000010
        System.out.println(2&3);//2

        //推导
        //1  先得到 -2 的原码 1000000 00000000 00000000 00000010
        // 2 -2的反码 11111111 11111111 11111111 11111101
        // 3 -2的补码 11111111 11111111 11111111 11111110
        //4 ~-2的操作 00000000 00000000 00000000 00000001 运算后的补码
        //5 运算后的原码 就是 00000000 00000000 00000000 00000001 +1
        System.out.println(~-2);//1

        //1 先得到 2 的补码 00000000 00000000 00000000 00000010
        //~2的操作 11111111 11111111 11111111 11111101 运算后的补码
        //3 -1 得到反码 11111111 11111111 11111111 11111100 反码
        //4 按位取反 得到原码 10000000 00000000 00000000 00000011  -3
        System.out.println(~2);//-3

        System.out.println(2|3);//3

        System.out.println(2^3);//1

    }
}
  • 还有3个位运算符 >> 、<< 和 >>> 运算规则

    • 算术右移 >> :低位溢出 符号位不变 并且用符号位补溢出的高位

    • 算术左移<< 符号位不变 ,低位补0;

    • 、>>> 逻辑右移 也叫无符号右移 运算规则 低位溢出(扔掉) 高位补零

    • 特别说明 没有<<< 符号

public class BitwiseTest {
    //位运算思考题
    public static void main(String[] args) {

        int a =1>>2;//1向右位移2位 00000000 00000000 00000000 00000001
        int b =-1>>2;// 10000000 00000000 00000000 00000001
        //11111111 11111111 11111111 11111110 +1
        //11111111 11111111 11111111 11111111 -1
        //11111111 11111111 11111111 11111110
        //10000000 00000000 00000000 00000001  -1

        int c =1<<2;//算术左移
        int d =-1<<2;
        //  10000000 00000000 00000000 00000001 原码
        //  11111111 11111111 11111111 11111110 取反
        //  11111111 11111111 11111111 11111111 +1 补码
        //  11111111 11111111 11111111 11111100 -1 运算后的补码
        //  11111111 11111111 11111111 11111011 反码 
        //  10000000 00000000 00000000 00000100 -4
        int e =3>>>2; //无符号右移
        int f =~2;
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
        System.out.println(f);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值