java运算符总结

1. 运算符

1.1 算数运算符

  1. 加减乘除就不说了,主要说明取模运算:%,它的实际公式如下:

    a%b = a - a/b*b

    10 % 3 结果为 1;-10 % 3 结果为 -1;10 % -3 结果为 1 ;-10 % -3 结果为 1

    例子:-10.5%3

    // a%b,当 a 为小数时,有一个对 a 的强制类型转换,公式为:a - (int)a/b*b,即 -10.5 - (-10)/3*3

  2. 着重说明一个面试题:

    int i = 1;
    i = i++;  //规则使用临时变量:(1)临时变量 temp = i(等号右边,因为++优先级比=高);(2)i = i + 1(等号右边);(3)再 i = temp(等号左边)
    System.out.println(i);  //输出结果为 1
    int i = 1;
    i = ++i;    //规则使用**临时变量**:(1)i = i + 1;(2)临时变量 temp = i;(3)再 i = temp
    System.out.println(i);  //输出结果为 2

  3. int c = 1;
    System.out.println(c++);
    //输出结果为1

1.2 关系运算符

==,!=, >, <, >=, <= 他们都返回类型都是布尔类型(boolean)的。

1.3 逻辑运算符

  1. 短路与:&&,短路或:||,取反:!。

  2. 逻辑与:&,逻辑或:|,逻辑异或:^。

  3. 短路与 && 和逻辑与 & 的区别,短路与 && 若第一个条件为 false,则后面的条件不会执行;逻辑与 & 第一个条件为 false,则后面的条件也会执行;短路或 || 第一个条件成立则后面的条件不会执行,而逻辑或 | 两个条件都会执行。如下:

    int a = 4;
    int b = 9;
    if(a < 1 && ++b < 50){
        System.out.println("OK");
    }
    //OK 不会输出,由于 a < 1不成立,则 && 后面的条件 ++b < 50 不会被执行,即 b 还是为 9;
   
```java
   int a = 4;
int b = 9;
   if(a < 1 & ++b < 50){
    System.out.println("OK");
   }
//OK 不会输出,虽然 a < 1不成立,但是 & 后面的 ++b < 50 还是会被执行,即 b 为 10;
  1. 综合练习:

    boolean x = true;
    boolean y = false;
    short z = 46;
    //1. 判断z == 46 true;2. z 自加;3. 判断 y = true 的逻辑值,此处为给 y 赋值 “ = ”,y 变为true,整个 && 表达式为真,执行 z++;
    if((z++ == 46) && (y = true))   z++;    
    if((x = false) || (++z == 49))  z++;    //同上,注意 x = false 是赋值语句,|| 前面的条件不成立,要执行后面的 ++z == 49
    System.out.println(z);      //输出结果为 50

1.4 赋值运算符

  1. 基本赋值运算符:=

  2. 复合赋值运算符:+=,-=,*=,/=,%= 。以 a += b 为例,意义为:a = a + b;

  3. 赋值运算符左边只能是变量,右边可以是变量、表达式、常量值。

  4. 复合赋值运算符会进行类型的转换,如:

    byte b = 3;
    b += 2; // 等价于 b = (byte)(b + 2);若写成  b = b + 2 则会报错 b + 2 为 2 一样的 int 类型,无法赋值给 byte 类型的 b
    b++;    //等价于 b = (byte)(b + 1)

1.5 三元运算符

  1. 形式为:条件表达式 ? 表达式1 : 表达式2;

  2. 表达式1 和 表达式2 要为可以赋给接收变量的类型(或可以自动转换),如:

    int c =  10 > 2  ?  1.1  :  3.2;        //报错,1.1 double 类型不能赋值给 int 类型的 c,若把 int c 改为 double c 就可以运行
  3. 三元运算符返回值以整体精度最高作为返回,如:

    System.out.println(3>2?1:2.0);//因为1为int,2.0为double,提升了三元运算符整体的精度,因此整体返回为1.0的double
    //注意:任意输一个System.out.println(2.0);,这个2.0是double不是float

1.6 位运算符

1.6.1 原码、反码、补码

  1. 二进制的最高位是符号位:0 表示正数,1 表示负数

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

  3. 负数的反码 = 它的原码符号位不变,其他位取反

  4. 负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1

  5. JAVA 中的数都是有符号的

  6. 计算机运行的时候,都是以补码的方式来运算

  7. 当我们看运算结果的时候,要看它的原码

    案例一:针对第 6 和第 7 条,因为 println 中的语句 2&3 中的数字是 int 类型的,所以 4 个字节 32 位:

    案例二:

    下图1-2:负数的反码 = 符号位不变,其他位取反

    下图2-3:负数的补码 = 负数的反码 + 1

    下图3-4:取反 ~ 操作对补码的所有位进行取反

    下图4-5:取反后看到符号位是 0 ,表示结果那个数的补码是个正数,故由于正数三码合一,原码也等于补码

    案例三:

    1:正数的补码 = 原码 = 反码

    2:取反 ~ 操作对补码的所有位进行取反,取反后看到符号位是 1 ,表示结果那个数的补码是个负数

    3:负数的反码 = 负数的补码 - 1

    4:负数的原码 = 负数的反码符号位不变,其他位取反

1.6.2 位运算符

  1. java 中有 7 个位运算符:

    &(按位与),|(按位或),^(按位异或),~(按位取反)

    >>(算术右移),<<(算数左移),>>>(无符号右移)

  2. 算术右移 >> :低位溢出,符号位不变,并用符号位补溢出的高位。4 >> 2 等价于 4 / 2 / 2

  3. 算数左移 << :符号位不变,低位补 0。4 << 2,等价于 4 * 2 * 2

  4. 无符号右移 >>> 又叫逻辑右移:低位溢出,高位补 0


2. 运算符优先级

  1. 第一类:(), {} 等

  2. 单目运算符:++,--,~,!

  3. 算术运算符:*,/,%,+,-

  4. 位移运算符:<<, >>

  5. 比较运算符:==,!=

  6. 逻辑运算符:&,^,|,&&,||,

  7. 三元运算符:? :

  8. 赋值运算符:=, += 等


3. 标识符

  1. java 的标识符由 26 个英文字母的大小写(区分)、数字、下划线 “_” 和 “$” 组成。

  2. 数字不能开头,不可以使用关键字和保留字。

  3. 命名规范:

    包名:多单词组成时所有字母都小写,如:aaa.bbb.ccc

    类名,接口名:多单词组成时,所有单词首字母大写:XxxYyyZzz(大驼峰形式),比如:TankShotGame

    变量名,方法名:多单次组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz(小驼峰形式),比如:tankShotGame

    常量名:所有字母都大写。多单词时每个单词用下划线链接:XXX_YYY_ZZZ,比如定义一个税率:TAX_RATE


4. 键盘输入语句

在编程中需要用户输入数据,如 C++ 的 cin,JAVA中需要一个扫描器(对象),就是 Scanner。步骤如下:

  1. 导入该类的所在包:import java.util.Scanner;

  2. 创建该类的对象:Scanner myScanner = new Scanner(System.in);

  3. 调用类的方法:int age = myScanner.next(); //此处的 next() 为类 Scanner 的方法,

    接收整型的方法:.nextInt(),接收字符串的方法:.nextString(),接收字符的方法:.next().charAt(0) ——实质上是接收了字符串的第一个字符

    程序如下:


5. 进制

  1. 二进制以 0b 或者 0B开头,如:0b1010

    八进制以 0 开头,如:057

    十六进制以 0x 或 0X 开头,如:0x5AB9

5.1 进制转换

  1. 十进制转八进制、十六进制的方法与二进制一样。

  2. 二进制转八进制、十六进制,从低位到高位,三个(八进制)或四个(十六进制)为一组,转化为相应的八 or 十六进制。八 or 十六转二,操作相反。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值