二:java运算符

91 阅读4分钟

算数运算符

// 精度注意点
System.out.printIn(10 / 4) // 2, 因为精度最大的为整数
System.out.printIn(10.0 / 4) // 2.5
double d = 10 / 4
System.out.printIn(d) // 2.0

// 取模注意点
System.out.printIn(10 % 3) // 1
System.out.printIn(-10 % 3) // -1
System.out.printIn(10 % -3) // 1
System.out.printIn(-10 % -3) // -1

关系(比较)运算符

无重点

image.png

逻辑运算符

无重点

  1. 从运算结果看:“&”符号与“&&”效果相同,“|”和“||”效果相同。
  2. “^”这个是异或,当a和b一个为true,一个为false时候,就为真
  3. “&”和“&&”的区别,&&如果第一个条件为false,就不会算第二个条件,而&还是会算。开发中通常只用&& &和&&在开发中实际的区别
  4. “|”和“||”的区别也和“&”和“&&”一样的区别
  5. “^”异或,当两个条件一个为真一个为假,异或成立
// & 和 && 的区别
int age = 50
int a = 5
// ++a 不执行
if (age > 20 &&  ++a < 6) {}
// ++a会执行
if (age > 20 & ++a < 6) {}

image.png

赋值运算符

注意点

  1. 复合赋值运算符会进行类型转换
byte b = 3
b = b + 2 // 会报错
b += 2 // 不会报错,会进行类型转换,相当于b = (byte)(b + 2)
// b++, b-- 等也有转换

运算符优先级

不用背,没必要,在写代码中熟悉就行 image.png

关键字

关键字不用背,编译器会提示,不用怕会拿关键字作为变量

键盘输入示范使用

import java.util.Scanner;

public class A {
    public static void main(String[] args) {
        Scanner myScanner = new Scanner(System.in);
        String name = myScanner.next();
        System.out.println(name);
        myScanner.close();
    }  
}

进制转换(高中知识)

A进制转成B进制,数学上的方法是,先把A进制转成成10进制,再把10进制转成B进制。

A进制转成成10进制用乘法,过于简单不做演示。

10进制转成2进制演示

image.png

源码补码反码(重点,背下)

image.png

位运算符

image.png

位运算示范

// 按位与&
System.out.println(2 & 3);
/**
 * 1. 先拿到2的源码 00000000 00000000 00000000 00000010
 * 2. 拿到2的补码   00000000 00000000 00000000 00000010
 * 3. 拿到3的源码   00000000 00000000 00000000 00000011
 * 4. 拿到3的补码   00000000 00000000 00000000 00000011
 * 5. 按位与&
 * 00000000 00000000 00000000 00000010
 * 00000000 00000000 00000000 00000011
 * 00000000 00000000 00000000 00000010 // 运算后的补码
 * 00000000 00000000 00000000 00000010 // 运算后的源码(正数三码合一)
 * 结果是2
 */
System.out.println(~-2); // 1
/**
 * 推导
 * 1. -2的源码: 10000000 00000000 00000000 00000010
 * 2. -2的反码: 11111111 11111111 11111111 11111101
 * 3. -2的补码: 11111111 11111111 11111111 11111110 // 所有计算都是用补码来计算
 * 4. ~-2操作:  00000000 00000000 00000000 00000001 // 运算后的补码
 * 5. 运算后的源码:00000000 00000000 00000000 00000001 // 1
 */

System.out.println(~2); // -3
/**
 * 推导
 * 1. 2的补码: 00000000 00000000 00000000 00000010
 * 2. ~2操作:  11111111 11111111 11111111 11111101 // 运算后的补码
 * 3. 运算后的反码:11111111 11111111 11111111 11111100 // 补码是负数,变为反码是建1操作
 * 4. 运算后源码:10000000 00000000 00000000 00000011 // 反码转换成原码,符号位不变,其余取反
 */

下一章本来是控制结构,但java和JavaScript是一样的,所以跳过