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

本文详细介绍了Java中的各种运算符(算术、关系、逻辑、赋值、位运算),包括取模运算的机制、自增操作的区别、运算符优先级、标识符命名规范,以及进制之间的转换和原码、反码、补码的概念。还通过实例展示了运算符在表达式中的行为和位运算符的使用。
摘要由CSDN通过智能技术生成

🔥博客主页: 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

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A_SHOWY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值