JAVA学习笔记——第四章 运算符

发布时间:2024年01月20日

🔥博客主页:?A_SHOWY
🎥系列专栏力扣刷题总结录?数据结构??云计算??数字图像处理??力扣每日一题_?运算符是一种特殊的符号,用于表示数据的运算、赋值和比较

算数运算符

取模 %的本质: a - (int)a / b * b//当a是小数时

public class Hello {
    public static void main(String[] args) {
        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先赋值后自增。和c++没有区别。注意自增运算符的优先级大于算数运算符。

面试题1:

?答:其主要过程为按照规则使用临时变量temp,先将i存到临时变量temp中,再对i进行自增,再把temp赋值给i,所以最后的值为1。

面试题2

答: 其主要过程为按照规则先将i自增,然后 将存到临时变量temp中,再将temp存到i中,最后i的值为2。

关系运算符

关系运算符的结果都是boolean型,要么true要么false ,关系运算符组成的表达式称为关系表达式。? ? ? ?

逻辑运算符

用于连接多个条件,最终结果也是boolean值。

分为两组:第一组短路与&& 短路或|| 取反!

第二组与& 逻辑或| 逻辑异或 ^

  • ?短路与&& 和逻辑与&相比效果相同,但是短路与的效率更高因为在判断第一个为假时,短路与直接判定为false,而逻辑与不管第一个判断如何都对两个进行全部的判断。
  • 短路或和逻辑或的思想是类似的,也是遵循这个“短路”的特性,第一个条件为真后边就不判断了。
  • 逻辑异或^,两边一真一假不同的才为真。总结为相同为真不同为假

赋值运算符

+= -= *= /=? 和c++一模一样?

复合赋值运算符会进行类型的转换

byte b = 3;
b += 2;//b = byte(b + 2);等价,底层有一个类型转换

三元运算符

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

  1. 如果条件表达式为真,运算后的结果是表达式是1,否则是2
  2. 表达式1和表达式2为可以赋给接收变量的类型(或可以自动转换)
    int c = a > b ? 1.1 : 2.6;//错误的
  3. 它的本质是if else 语句

  4. 例子:三个数,寻找最大值,用一句语句

    int max = (n1 > n2 ? n1 : n2) > n3 ? (n1 > n2 ? n1 : n2) : n3;

关于运算符优先级

  1. 只有单目运算符和赋值运算符是从右向左运算
  2. 大致分为(1)(),{}等(2)单目运算:++ -- ^ !(3)算数运算符:+ -(4)位移运算符:>> <<<(5)比较运算符(6)逻辑运算符(7)三元运算符(8)赋值运算符?

标识符的命名规格和规范

规则:

  1. 由26个英文字母大小写,0-9或$组成
  2. 数字不能开头,不能用关键字和保留字,但是可以包含
  3. 严格区分大小写,长度无限制
  4. 标识符不能包含空格

规范:

  1. 包名多单词组成时所有字母小写
  2. 类名和接口名所有单词的首字母大写XxxYyyZzz(大驼峰)
  3. 变量名和方法名xxxYyyZzz(小驼峰)?
  4. 常量名:所有字母都大写

?例子:

import java.util.Scanner;//引入scanner类所在的包

public class Hello {
    public static void main(String[] args) {
        //创建Scanner类的对象,scanner就是Scanner类的对象
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入姓名");
        String name = scanner.next();
        System.out.println("请输入年龄");
        int age = scanner.nextInt();
        System.out.println("请输入成绩");
        double score = scanner.nextDouble();
        System.out.println("name: " + name + "\t" + "age: " +age + "\t" + "score: " + score);
    }
}

?进制

  1. 二进制:只用0 和1 来表示一个数? ?开头0b/0B
  2. 十进制
  3. 八进制:以数字0开头
  4. 十六进制:0-9 A-F来表示数,用0x打头

进制的转换

第一组:其他进制转十进制? ?

二进制转十进制? 例:0b1011:1 * 2的零次方 + 1 * 2的一次方 + 1 * 2的三次方 = 11?

八进制转十进制? 例:0234? ?: 4 * 8的零次方 + 3 * 8的一次方 + 2 * 8的二次方 = 156

十六进制转十进制 例:0x23A:10 * 16的零次方 + 3 * 16的一次方 + 2 * 16的二次方 = 570?

第二组:十进制 转成其他进制

十进制转二进制:例: 34

十进制转八进制:例:131(同理)得:0203

十进制转十六进制:例:237(同理)得:0xED

第三组:不同进制间的转换

二进制转八进制和16进制:0b11010101?

转八进制:每三位一组,转成对应的八进制数0325

转十六进制:每四位一组,转成对应的十六进制数 0xD5

八进制转二进制:八进制每一位数,转成一个对应的3位二进制数 例:0237

02(010)3(011)7(111) ——> 0b10011111

十六进制转二进制:十六进制每一位数转成4位的二进制数 例:0x23b

0x2(0010)3(0011)b(1011)——> 0b1000111011

原码 反码 补码

对于有符号的数,有8个原则:

  1. 二进制的最高位是符号位,0代表正数,1代表负数
  2. 正数的原码、反码、补码都是一样的
  3. 负数的反码是符号位不变,其他位取反(0变1 1变0)
  4. 负数的补码是反码+1 ,负数的反码等于补码-1
  5. 0的反码补码都是0
  6. java的数都是有符号的数
  7. 计算机运算时候,都是以补码的方式进行运算的
  8. 看运算结果的时候要看它的原码(运算看补码,结果看原码)

位运算符:

java 中有7个

例:

(很重要)

>> 算数右移:低位溢出,符号位不变

<<算数左移:低位补0,符号位不变?

>>>逻辑右移:低位溢出,高位补0,没有<<<符号

练习:

int i = 66;
System.out.println(i++ + i);//133,i++ 被用在表达式中,它的值是 66(使用当前值,然后增加 1,但在这个表达式中使用的是当前值)。
int i = 66;
System.out.println(++i + i);//134

?

文章来源:https://blog.csdn.net/showy0/article/details/135680142
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。