第四章 运算符

一、运算符介绍

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

运算符分类
(1)算术运算符
(2)赋值运算符
(3)关系运算符(比较运算符)
(4)逻辑运算符
(5)位运算符(需要二进制基础)
(6)三元运算符

二、算术运算符

算术运算符是对数值类型的变量进行运算的,在 Java 程序中使用的非常多。

在这里插入图片描述

三、关系运算符

(1)关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false。

(2)关系表达式,经常用在 if 结构的条件中或循环结构的条件中。

在这里插入图片描述

四、逻辑运算符

用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean 值。

在这里插入图片描述
(1)a&b:& 叫逻辑与。规则:当 a 和 b 同时为 true,则结果为 true,否则为 false。
(2)a&&b:&& 叫短路与。规则:当 a 和 b 同时为 true,则结果为 true,否则为 false。
(3)a|b:| 叫逻辑或。规则:当 a 和 b ,有一个为 true,则结果为 true,否则为 false。
(4)a||b:|| 叫短路或。规则:当 a 和 b ,有一个为 true,则结果为 true,否则为 false。
(5)!a:! 叫取反,或者非运算。规则:当 a 为 true,则结果为 false,当 a 为 false,结果为 true。
(6)a^b:叫逻辑异或。规则:当 a 和 b 不同时,则结果为 true,否则为 false。

&& 和 & 使用区别
(1)&&短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高。
(2)& 逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低。
(3)开发中, 我们使用的基本是使用短路与&&,效率高。

五、三元运算符

基本语法:
条件表达式 ? 表达式 1: 表达式 2;

运算规则:
(1)如果条件表达式为 true,运算后的结果是表达式 1;
(2)如果条件表达式为 false,运算后的结果是表达式 2;

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

1. 标识符

标识符概念:
(1)Java对各种变量、方法和类等命名时使用的字符序列称为标识符。
(2)凡是自己可以起名字的地方都叫标识符,int num1=90;

标识符的命名规则(必须遵守)
(1)由26个英文字母大小写,0-9_$ 组成。
(2)数字不可以开头。
(3)不可以使用关键字和保留字,但能包含关键字和保留字。
(4)Java中严格区分大小写,长度无限制。
(5)标识符不能包含空格。

标识符命名规范
(1)包名:多单词组成时所有字母都小写,比如 com.hsp.crm
(2)类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz[大驼峰],比如: TankShotGame
(3)变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [小驼峰,简称驼峰法],比如: tankShotGame
(4)常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ,比如 :定义一个所得税率,TAX_RATE。

2. 关键字

定义:被 Java 语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写在这里插入图片描述

3. 保留字

Java 保留字:现有 Java 版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字 byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const

七、进制(P87)

1. 进制介绍

对于整数,有四种表示方式:
(1)二进制:【0,1】满 2 进 1,以 0b 或 0B 开头。
(2)十进制:【0-9】满 10 进 1。
(3)八进制:【0-7】满 8 进 1,以数字 0 开头表示。
(4)十六进制:【0-9 及 A(10)-F(15)】满 16 进 1,以0x或0X开头表示。(此处的 A-F 不区分大小写)

2. 二进制转八进制

规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。
案例:请将 0b11010101 转成八进制
0b110(6)010(2)101(5) = 0625

3. 二进制转十六进制

规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
案例:请将 0b11010101 转成十六进制
0b1101(13)0101(5) = 0XD5

4. 八进制转二进制

规则:规则:将八进制数每1位,转成对应的一个3位的二进制数即可
案例:请将 0237 转成二进制
02(010)3(011)7(111)= 0B10011111

5. 十六进制转二进制

规则:将十六进制数每1位,转成对应的4位的一个二进制数即可。
案例:请将 0x23B 转成二进制
0x2(0010)3(0011)B(1011) = 0B1000111011

八、位运算

1. 二进制在运算中的说明

  1. 二进制是逢2进位的进位制,01 是基本算符。

  2. 现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是“逢2进1”,数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。

2. 原码、反码、补码(重点、难点)

对于有符号的而言:
(1)二进制的最高位是符号位:0表示正数,1表示负数。

(2)正数的原码,反码,补码都一样(三码合一)。

(3)负数的反码 = 它的原码符号位不变,其它位取反(0->1,1->0)。

(4)负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1。

(5)0 的反码,补码都是 0。

(6)java 没有无符号数,换言之,java中的数都是有符号的。

(7)在计算机运算的时候,都是以补码的方式来运算的。

(8)当我们看运算结果的时候,要看他的原码。

3. 位运算

Java中有7个位运算(& 、| 、^ 、~、 >>、<<和>>>)

分别是 按位与& 、按位或| 、按位异或^ ,按位取反~ ,它们的运算规则是:

(1)按位与& :两位全为1,结果为1,否则为0

(2)按位或| :两位有一个为1,结果为1,否则为0

(3)按位异或^ :两位一个为0,一个为1,结果为1,否则为0

(4)按位取反~:0->1,1->0

public class Demo {
    public static void main(String[] args) {
        /**
         * (1)先得到2的补码
         * => 2的原码 00000000 00000000 00000000 00000010
         * => 2的补码 000000O0 00000000 00000000 00000010
         * (2)再得到3的补码
         * => 3的原码 00000000 00000000 00000000 00000011
         * => 3的补码 00000000 00000000 00000000 00000011
         * (3)按位&
         * 2的补码 000000O0 00000000 00000000 00000010
         * 3的补码 00000000 00000000 00000000 00000011
         * 运算后的补码 000000O0 00000000 00000000 00000010
         * 运算后的原码也是 000000O0 00000000 00000000 00000010
         * 结果就是 2
         */
        System.out.println(2&3);//2
    }
}
public class Demo {
    public static void main(String[] args) {
        /**
         * (1)先得到-2的补码
         * => -2的原码 10000000 00000000 00000000 00000010
         * => -2的反码 11111111 11111111 11111111 11111101
         * => -2的补码 11111111 11111111 11111111 11111110
         * (2)按位取反~
         * 运算后的补码 00000000 00000000 00000000 00000001
         * 运算后的原码 000000O0 00000000 00000000 00000001
         * 结果就是 1
         */
        System.out.println(~-2);//1
    }
}
public class Demo  {
    public static void main(String[] args) {
        
        // 2 的原码  00000000 00000000 00000000 00000010
        // 2 的补码  00000000 00000000 00000000 00000010
        // ~2 的补码 11111111 11111111 11111111 11111101
        // ~2 的反码 11111111 11111111 11111111 11111100
        // ~2 的原码 10000000 00000000 00000000 00000011 (-3)
        System.out.println(~2); // -3
    }
}

还有3个位运算符

(1)算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位(本质:除以2)

(2)算术左移 <<:符号位不变,低位补0(本质:乘以2)

(3)逻辑右移 >>>:逻辑右移也叫 无符号右移,运算规则是:低位溢出,高位补0

(4)特别说明:没有 <<< 符号

public class Demo   {
    public static void main(String[] args) {

        // 00000000 00000000 00000000 00000001
        // 00000000 00000000 00000000 00000000 01
        // 00000000 00000000 00000000 00000000
        int a = 1 >> 2;
        System.out.println(a); // 0

        // -1原码:10000000 00000000 00000000 00000001
        // -1反码:11111111 11111111 11111111 11111110
        // -1补码:   11111111 11111111 11111111 11111111
        // 运算后补码: 11111111 11111111 11111111 11111111 11
        // 元算后反码:11111111 11111111 11111111 11111110
        // 运算后原码:10000000 00000000 00000000 00000001
        int c = -1 >> 2;
        System.out.println(c); // -1

        // 1原码:00000000 00000000 00000000 00000001
        // 运算后补码: 00000000 00000000 00000000 00000000 01
        int d = 1 >>> 2;
        System.out.println(d); // 0

        // -1原码:10000000 00000000 00000000 00000001
        // -1反码:11111111 11111111 11111111 11111110
        // -1补码:   11111111 11111111 11111111 11111111
        // 运算后补码: 00111111 11111111 11111111 11111111 11
        // 运算后补码: 00111111 11111111 11111111 11111111 (1073741823)
        int f = -1 >>> 2;
        System.out.println(f); // 1073741823

        // 00000000 00000000 00000000 00000001
        // 00000000 00000000 00000000 00000100
        int b = 1 << 2;
        System.out.println(b); // 4
    }
}
  • 18
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值