002 Java中的运算符、位运算、标识符

本文详细介绍了Java中的运算符,包括算术运算符如除法、取模和自增/自减,以及关系运算符、逻辑运算符的用法和区别。此外,还讨论了进制转换,如二进制、八进制、十进制和十六进制之间的转换方法。同时,提到了位运算,如按位与、按位或和按位异或,以及移位运算。最后,文章提及了标识符的命名规则和关键字、保留字的使用规范。
摘要由CSDN通过智能技术生成

1、运算符

算术运算符

在这里插入图片描述

  • 需要注意的运算符

    • 除 /

       System.out.println(10 / 4);   //结果:2 因为10、4都是整数,所以结果为整数
       double d = 10 / 4;            //结果:2.0 因为d为double型,所以结果为浮点型
       System.out.println(10.0 / 4); //结果:2.5
      
    • 取模 %

      两个数取模的本质为,a % b = a - a / b * b

      //取模的本质为 a % b = a - a / b * b
      System.out.println(10 % 3);  //结果 :1
      System.out.println(-10 % 3); //结果 :-1
      System.out.println(10 % -3); //结果 :1
      System.out.println(-10 % -3); //结果 :-1
      
    • 自增/自减 ++/–

      • 前缀:i++ / i-- ,在表达式中先赋值后自增自减
      • 后缀:++i / --i,在表达式中先自增自减后赋值

      他们都表示自增或自减

      int i = 1;
      int j = 1;
      int a = i++; //先赋值,后做自增运算
      int b = ++j; //先做自增运算,后赋值
      System.out.println(a + "," + b); //结果:a=1 ,b=2
      

关系运算符

  • 关系运算符的运算结果都是boolean型 true or false,例如 12 > 11的值为true

    在这里插入图片描述

  • "==“表示做等值比较,”="表示赋值,一定要区分

逻辑运算符

  • 短路与 && 和 逻辑与 &

    • 相同点

      左右两边都为true,才输出true,否则返回false

    • 不同点

      • 对于短路与 && ,如果前面为false,则后面不会执行

        int a = 1;
        int b = 2;
        if(a < 1 && ++b > 1){
            System.out.println("ok");
        }
         System.out.println(b); //输出b还是2 ,不会执行++b操作
        
      • 对于逻辑& ,如果前面为false,后面还是会继续执行

        int a = 1;
        int b = 2;
        if(a < 1 & ++b > 1){
            System.out.println("ok");
        }
         System.out.println(b); //输出b是3 ,会执行++b操作
        
    • 所以我们会常用短路与&& ,效率高

  • 短路或 || 和 逻辑或 |

    • 相同点

      只要有一边为true,则返回true,只有都为false的时候才返回false

    • 不同点

      • 对于短路或 || ,如果前面为true,则后面不会执行
      • 对于逻辑 | ,如果前面为true,后面还是会继续执行
  • 取反 !

    • 真为假,假为真

      System.out.println(!(60 > 0)); //返回true
      
  • 异或

    • 都为true或者都为false时,返回false;一真一假为true

赋值运算符 =

  • += 表示的含义 ,比如 a+=b; 等价于 a = a + b;

  • 复合赋值运算时会有一个类型的强制转换,例如

    byte b = 1;
    b+=2; //等价于 b = (byte)(b + 2); 因为2默认是int型
    b++//等价于 b = (byte)(b + 1);
    

三元运算符

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

    • 条件表达式为真 ,返回表达式1;否则返回表达式2
  • 注意:

    • 三元运算符的返回值,也就是表达式1或者表达式2,必须要与接受的类型相匹配

      int c = 1 > 2 ? 3 : 4; //3,4 都为int型
      int c = 1 > 2 ? 1.1 : 1.2; //错误 :结果为double型,接收的类型为int 
      
    • 三元运算符的本质其实就是一条if…else… 语句

      //a > b ? a : b;
      if(a > b){
          result = a;
      }else{
          result = b;
      }
      
  • 案例:求三个数中最大值

    //三元运算符
    public class TernaryOperator {
        public static void main(String[] args) {
            //比较三个数中最大的
            int a = 1;
            int b = 2;
            int c = 3;
            int max = (a > b ? a : b) > c ? (a > b ? a : b) : c ;
            System.out.println(max);
        }
    }
    

运算符优先级

  • 算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符

在这里插入图片描述

2、进制转换

  • 进制
    • 二进制:0和1,逢二进一,以0b或者0B开头表示二进制
    • 八进制:0-7,逢八进一,以0开头表示八进制
    • 十进制:0-9,逢十进一
    • 十六进制:0-9和A-F,逢十六进一,以0X或0x开头表示十六进制

转十进制

  • 二进制转十进制

    • 从最低位到最高位依次取出数,乘以2的位数减1次方,求和

      例:二进制数1111 转十进制
      0b1111 = (1 * 2^0) + (1 * 2^1) + (1 * 2^2) + (1 * 2^3)
      	   = 1 + 2 + 4 +8
      	   = 15
      
      例2:二进制数0b110001100 转十进制
      0b110001100 = 1 * 2^2 + 1 * 2^3 + 1 * 2^7 + 1 * 2^8
      			= 4 + 8 + 128 + 256
      			= 396
      
  • 八进制转十进制

    • 从最低位到最高位依次取出数,乘以8的位数减1次方,求和

      例:八进制数0234 转十进制
      0234 = (4 * 8^0) + (3 * 8^1) + (2 * 8^2)
      	 = 4 + 24 + 128
      	 = 156
      
      例2:八进制数02456 转十进制
      02456 = 6 * 8^0 + 5 * 8^1 + 4 * 8^2 + 2 * 8^3
      	  = 1280
      
  • 十六进制转十进制

    • 从最低位到最高位依次取出数,乘以16的位数减1次方,求和

      例:将0x23A转成十进制
      0x23A = (10 * 16^0) + (3 * 16^1) + (2 * 16^2)
      	  = 10 + 48 + 512
      	  = 570
      	  
      例2:十六进制数0xA45转十进制
      0xA45 = 5 * 16^0 + 4 * 16^1 + 9 * 16^2
      	  = 2373
      

十进制转其他进制

  • 十进制转二进制
    • 将十进制数不断除以二,直到商为零,将每次得到的余数倒过来就是对应的二进制
  • 十进制转八进制
    • 将十进制数不断除以八,直到商为零,将每次得到的余数倒过来就是对应的八进制
  • 十进制转十六进制
    • 将十进制数不断除以十六,直到商为零,将每次得到的余数倒过来就是对应的十六进制

二进制转八进制、十六进制

  • 转八进制

    • 从低位开始,将二进制的每三位数当成八进制的一位数,并转为对应的八进制数
    例:0b1101101 -> 1 101 101 -> 0155
    
  • 转十六进制

    • 从低位开始,将二进制的每四位数当成十六进制的一位数,并转为对应的十六进制数
    例:0b11010101 -> 0x 1101 0101 -> 0xD5
    

八进制、十六进制转二进制

  • 八进制转二进制
    • 将八进制的每一位数,转成一个三位的二进制数
  • 十六进制转二进制
    • 将十六进制的每一位数,转成一个四位的二进制数

3、位运算

原码、反码、补码注意事项

  • 二进制最高位是符号位0表示正数,1表示负数
  • 正数的原码反码补码都是一样
  • 负数的反码==符号位不变,其他位数取反(0->1,1->0)
  • 负数的补码它的反码 + 1,反码它的补码 - 1
  • 0的反码和补码都为0
  • Java中的数都是有符号的
  • 计算机运算是以补码的方式来运算
  • 运算结果看原码

Java中有七个位运算符:&、I、^、~、<<、>>和>>>

  • 按位运算:
    • 按位与&: 两位全为1,结果为1,否则为0
    • 按位或| :两位有一个为1,结果为1,否则为0
    • 按位异或^: 两位一个为0,一个为1,结果为1,否则为0
    • 按位取反~:: 0->1,1->0

在这里插入图片描述

在这里插入图片描述

  • 移位运算 <<、>>和>>>

    • 算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
    • 算术左移<<:符号位不变,低位补0
    • 逻辑右移>>>:也叫无符号右移运算规则是:低位溢出,高位补0。特别说明:没有<<<符号

在这里插入图片描述

4、标识符、关键字、保留字

标识符的命名规则而规范

  • 规则
    • 必须由字母、数字、_ 、$ 组成
    • 不能以数字开头
    • 不能使用关键字或保留字重复
    • 严格区分大小写,长度理论上没有限制。作用域内不能重复
    • 不能包含空格
  • 规范
    • 包名小写,用点隔开 ,比如com.wjw
    • 类名、接口:大驼峰命名规则,单词首字母大写 Student
    • 变量名和方法名 : 小驼峰命名规则,第一个单词首字母小写,其余单词首字母大写 ,比如 runStart()
    • 常量名:所有字母大写,用_隔开,比如 STUDENT_AGE

关键字

  • 被Java赋予含义的字符串,全部小写

保留字

在这里插入图片描述

不能包含空格

  • 规范
    • 包名小写,用点隔开 ,比如com.wjw
    • 类名、接口:大驼峰命名规则,单词首字母大写 Student
    • 变量名和方法名 : 小驼峰命名规则,第一个单词首字母小写,其余单词首字母大写 ,比如 runStart()
    • 常量名:所有字母大写,用_隔开,比如 STUDENT_AGE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值