文章目录

  • 1. 算术运算符
  • 2. 关系运算符(比较运算符)
  • 3. 逻辑运算符
  • 4. 赋值运算符
  • 5. 三元运算符
  • 5. 运算符的优先级
  • 6. 标识符命名规则和规范
  • 7. 关键字
  • 8. 保留字
  • 9. 键盘输入
  • 10. 进制
  • 10.1 进制介绍
  • 10.2 进制转换
  • 10.3 原码、反码、补码
  • 10.4 位运算


1. 算术运算符

运算符

运算

+

正号

-

负号

+


-


*


/


%

取模(取余)

++

自增


自减

+

字符串拼接

除法(/):Java中,整型数据除法运算结果的舍入规则与C语言中相同,都是向0舍入。

int a = 3/2;  //float除法应该为 1.5
int b = 5/3;  //float除法应该为 1.666
int c = 5 /4;  //~~~~~~~~~~~~  1.25

int d = -3/2; //~~~~~~~~~~~~  -1.5
int e = -5/3; //~~~~~~~~~~~~~~  -1.66
int f = -5/4; //~~~~~~~~~~~~~~  -1.25

System.out.printf("a is %d\nb is %d\nc is %d\n" +
                  "d is %d\ne is %d\nf is %d\n",
                   a, b,c,d,e,f);

输出结果:

a is 1
b is 1
c is 1
d is -1
e is -1
f is -1

浮点型数据除法运算结果小数部分的位数:若能整除,显示整数+“.0”(如2.0);若能除尽且有小数,显示有效的位数,小数末尾的0不显示;若不能除尽,显示该数据类型能保留的位数。

float a = 10F;
System.out.println(a / 2);//5.0
System.out.println(a / 4);//2.5
System.out.println(a / 8);//1.25
System.out.println(a / 16);//0.625
System.out.println(a / 3);//3.3333333
System.out.println(a / 7);//1.4285715

double b = 10;
System.out.println(b / 2);//5.0
System.out.println(b / 4);//2.5
System.out.println(b / 8);//1.25
System.out.println(b / 16);//0.625
System.out.println(b / 3);//3.3333333333333335
System.out.println(b / 7);//1.4285714285714286

取模(%):a % b 的本质是 a - a / b * b

System.out.println(10 % 3); //1
System.out.println(-10 % 3); // -10 - (-10) / 3 * 3 = -1
System.out.println(10 % -3); // 10  - 10 / (-3) * (-3) = 1
System.out.println(-10%-3);  // -10 - (-10) / (-3) * (-3) = -1

当a是小数时,a % b = a - (int)a / b * b
-10.5 % 3 = -10.5 - (-10) / 3 * 3 = -10.5 - (-3) * 3 = -1.5

自增(++)/ 自减(- -)
作为独立语句使用时:i++ 和 ++i 都完全等价于 i = i + 1;
作为表达式使用时:++i 先自增后赋值;i++ 先赋值后自增。

int i = 10;
i++;
++i;
System.out.println("i=" + i); //12

int j = 8;
int k = ++j; //等价于j=j+1; k=j
System.out.println("k = "+ k + " j=" + j);//9 9

k = j++;	 //等价于k =j; j=j+1;
System.out.println("k = "+ k + " j=" + j);//9 10

练习题:

int i = 1;
i = i++;
System.out.println(i); // 输出1

上面的代码做了这样的工作:temp = i; i = i + 1; i = temp;

int i = 1;
i = ++i;
System.out.println(i); // 输出2

上面的代码做了这样的工作:i = i + 1; temp = i; i = temp;

2. 关系运算符(比较运算符)

关系运算的结果都是boolean型,或者为true,或者为false。

运算符

运算

范例

结果

==

等于

8 == 7

false

!=

不等于

8 != 7

true

<

小于

8 < 7

false

>

大于

8 > 7

true

<=

小于等于

8 <= 7

false

>=

大于等于

8 >= 7

true

instanceof

检查是否是类的对象

“hsp” instanceof String

true

int a = 9; 
int b = 8;
System.out.println(a > b); //T
System.out.println(a >= b); //T
System.out.println(a <= b); //F
System.out.println(a < b);//F
System.out.println(a == b); //F
System.out.println(a != b); //T
boolean flag = a > b; //T
System.out.println("flag=" + flag) ;

3. 逻辑运算符

a

b

a & b

a && b

a | b

a || b

!a

a ^ b

true

true

true

true

true

true

false

false

true

false

false

false

true

true

false

true

false

true

false

false

true

true

true

true

false

false

false

false

false

false

true

false

短路与(&&)、逻辑与(&):两个条件都为 true,结果为 true,否则 false。区别如下:

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

短路或(||)、逻辑或(|):两个条件中只要有一个true,结果为 true,否则为false。区别如下:

  • 短路或(||):如果第一个条件为 true,则第二个条件不会判断,最终结果为 true,效率高。
  • 逻辑或(|):不管第一个条件是否为 true,第二个条件都要判断,效率低。
  • 开发中,基本都是使用 ||。

取反(!):true ➡ false,false ➡ true。
异或(^): 不同为true,相同为false(求异)。

boolean b = (10 > 1) ^ (3 < 5);
System.out.println( b);//false

4. 赋值运算符

种类

  • 基本赋值运算符:=
  • 复合赋值运算符:+= ,-= ,*= , /= ,%= 等

使用细节

  • 运算顺序从右往左 int num= a + b + c;
  • 赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
int num = 20;	 
int num2 = 78*34-10; 	
int num3 = a;
  • 复合赋值运算符等价于这样的的效果,比如:a += 3; 等价于a = a + 3; 其他类推。
  • 复合赋值运算符会进行类型转换,“a += 3"不是简单的等价于"a = a + 3”。
byte b = 2;
b += 3;//相当于b = (byte)(b + 3)
//b = b + 3; 结果是int,赋值给byte会报错
System.out.println(b);//5
b++;//相当于b = (byte)(b + 1)
//b = b + 1; 结果是int,赋值给byte会报错
System.out.println(b);//6

5. 三元运算符

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

  • 运算规则
    如果条件表达式为 true,运算后的结果是表达式 1;
    如果条件表达式为 false,运算后的结果是表达式 2;
int a = 10;
int b = 99;
int result = a < b ? a++ : b--;//b--未执行
System.out.println(result);	//10
System.out.println(a);		//11
System.out.println(b);		//99
  • 表达式1、表达式2要与接收变量的类型相同,或可以自动转换为接收变量的类型。
int a = 3;
int b = 8;
int c = a > b ? (int)1.1 : (int)3.4;//可以
double d = a > b ? a : b+3;//可以的,满足int->double
  • 三元运算符可以转成 if-else 语句,下面两段代码等价。
int res = a > b ? a++ : --b;
if ( a > b) 
	res = a++;
else 
	res = --b;

5. 运算符的优先级

只有单目运算符、赋值运算符是从右向左运算的。

java int相除保留小数 java int除以float_运算符

6. 标识符命名规则和规范

标识符:用于命名变量、方法和类等。凡是自己可以起名字的地方都叫标识符。

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

标识符的命名规范(更加专业):
(1) 包名:多单词组成时,所有字母都小写,如:com.hsp.crm。
(2) 类名、接口名:多单词组成时,所有单词的首字母大写(大驼峰),如: TankShotGame。
(3) 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写(小驼峰),如: tankShotGame。
(4) 常量名:所有字母都大写。多单词时每个单词用下划线连接,如 : TAX_RATE。

7. 关键字

定义:被 Java 语言赋予了特殊含义,用做专门用途的单词。

特点:关键字中所有字母都为小写。

java int相除保留小数 java int除以float_System_02


java int相除保留小数 java int除以float_补码_03

8. 保留字

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

9. 键盘输入

接收用户输入的数据,需要一个扫描器(对象), 就是Scanner。步骤为:

(1) 导入该类的所在包,java.util.*;

(2) 创建该类对象(声明变量);

(3) 调用里面的功能。

java int相除保留小数 java int除以float_运算符_04

要使用一个类,就要先导入它所在的包,不知道类所在的包可以查文档。

import java.util.Scanner;//表示把 java.util 下的 Scanner 类导入
public class Input {
	public static void main(String[] args) {
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入姓名");
		String name = myScanner.next();	//接收用户输入 String
		System.out.println("请输入性别");
		char gender = myScanner.next().charAt(0);//接收用户输入 char
		System.out.println("请输入年龄");
		int age = myScanner.nextInt(); 	//接收用户输入 int
		System.out.println("请输入薪水");
		double sal = myScanner.nextDouble(); //接收用户输入 double
		System.out.println("人的信息如下:");
		System.out.println("姓名=" + name + " 性别=" + gender + " 年龄=" + age + " 薪水=" + sal);
	}
}

10. 进制

10.1 进制介绍

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

无论以什么进制赋值给int,输出时都是十进制。

int n1 = 0b1010;//二进制
int n2 = 1010;//十进制
int n3 = 01010;//八进制
int n4 = 0X10101;//十六进制
System.out.println("n1=" + n1);//10
System.out.println("n2=" + n2);//1010
System.out.println("n3=" + n3);//520
System.out.println("n4=" + n4);//65793

进制图示

java int相除保留小数 java int除以float_System_05


java int相除保留小数 java int除以float_java int相除保留小数_06

10.2 进制转换

第一组

  • 二进制 ➡ 十进制:从最低位(右边)开始,将每位上的数提取出来,乘以2(n-1),再求和。
  • 八进制 ➡ 十进制:从最低位(右边)开始,将每位上的数提取出来,乘以8(n-1),再求和。
  • 十六进制 ➡ 十进制:从最低位(右边)开始,将每位上的数提取出来,乘以16(n-1),再求和。

第二组

  • 十进制 ➡ 二进制:将该数不断除以 2,直到商为 0,然后将每步得到的余数倒过来,就是对应的二进制。
  • 十进制 ➡ 八进制:将该数不断除以 8,直到商为 0,然后将每步得到的余数倒过来,就是对应的八进制。
  • 十进制 ➡ 十六进制:将该数不断除以 16,直到商为 0,然后将每步得到的余数倒过来,就是对应的十六进制。

第三组

  • 二进制 ➡ 八进制:从低位开始,将二进制数每 3 位一组,转成对应的八进制数。
  • 二进制 ➡ 十六进制:从低位开始,将二进制数每 4 位一组,转成对应的十六进制数。

第四组

  • 八进制 ➡ 二进制:将八进制数每一位,转成对应的一个 3 位的二进制数。
  • 十六进制 ➡ 二进制:将十六进制数每一位,转成对应的一个 4 位的二进制数。

10.3 原码、反码、补码

  • 二进制的最高位是符号位:0为正,1为负。
  • 正数的原码,反码,补码相同。
  • 负数的反码 = 原码忽略符号位,各位取反。
  • 负数的补码 = 原码忽略符号位,各位取反,末位 + 1;补码 = 反码 + 1;反码 = 补码 - 1。
    由原码求补码的快捷方法:符号位不变,从右往左,第一个1及其右边不变,左边按位取反。补码求原码也一样。
  • java int相除保留小数 java int除以float_java int相除保留小数_07

  • 0的反码,补码都是0。
  • Java 没有无符号数。换言之,Java中的数都是有符号的。
  • 计算机都是以补码的方式运算。
  • 当看运算结果的时候,要看原码。

10.4 位运算

运算

描述

按位与(&)

两位全为1,结果为1,否则为0

按位或(|)

两位有一个为1,结果为1,否则为0

按位异或(^)

不同为1,相同为(求异)

按位取反(~)

0 ➡ 1,1 ➡ 0

例:求 ~2(计算机用补码运算,用原码展示结果)
(1)求 2的补码 00000000 00000000 00000000 00000010
(2)对补码取反 11111111 11111111 11111111 11111101
(3)结果转原码 10000000 00000000 00000000 00000011 = -3
所以,~2 = -3

练习:~-2 = 1, 2&3 = 2

运算

官方方法

(注意计算机用补码运算,用原码展示)

快捷方法

(直接在原码上操作)

算术右移 (>>)

符号位不变,其余各位右移,高位用符号位补齐

每算术右移一位相当于 / 2(-1比较特殊,无论右移多少结果都是 -1

算术左移 (<<)

符号位不变,其余各位左移,低位补 0

每算术右移一位相当于 * 2

无符号右移(>>>)

也叫逻辑右移,各位右移,高位补 0

特别说明:没有 <<< 符号

例:-1 << 2
-1的原码:  10000001
-1的补码:  11111111
补码 <<2:  11111100
结果转原码 :   10000100 = -4(与快捷方法计算一致)

-1 >> 2
-1的原码:  10000001
-1的补码:  11111111
补码 >>2:  11111111
结果转原码 :   10000001 = -1(与快捷方法计算不一致)

4 << 3 == 32  4 * 2 * 2 * 2 = 32
15 >> 2 ==3   15 / 2 / 2 = 7 / 2 = 3(可以直接15 / 4 ?)

int a = 1 >> 2; 
int b = -1 >> 2;
int c = 1 << 2;
int d = -1 << 2;
int e = 3 >>> 2;
System.out.println("a="+a);//a=0
System.out.println("b="+b);//b=-1
System.out.println("c="+c);//c=4
System.out.println("d="+d);//d=-4
System.out.println("e="+e);//e=0