java运算符和Scanner和进制运算

时间:2023-02-05 14:57:09

1.  赋值运算符

(1)基本介绍

基本赋值运算符 = int a = 10;

复合赋值运算符

+= ,-= ,*= , /= ,%= 等 , 重点讲解一个 += ,其它的使用是一个道理

a += b; [等价 a = a + b; ]

a -= b; [等价 a = a - b; ]

(2)特点

运算顺序从右往左

int num = a + b + c;

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

int num = 20; int num2= 78 * 34 - 10; int num3 = a;

注意:复合赋值运算符会进行类型转换

public class Test8
{
public static void main(String[] args)
{
int n1 = 10;
n1+=4;//n1=n1+4
System.out.println(n1);//14
n1/=3;//n1=n1/3
System.out.println(n1);//4

//复合赋值运算符会进行类型转换
byte b = 3;
b+=2;//b=b+2等价于b=(byte)(b+2)
b++;//等价于b=(byte)(b+1)
}
}

2. 三元运算符 77

(1)运算规则

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

1. 如果条件表达式为 true,运算后的结果是表达式 1;

2. 如果条件表达式为 false,运算后的结果是表达式 2;

public class Test8
{
public static void main(String[] args)
{
// int a = 10;
// int b = 99;
// int result = (a>b?a++:b--);
// System.out.println(result);//99

int a = 10;
int b = 99;
int result = (a<b?a++:b--);
System.out.println(result);//10
System.out.println(a);//11
System.out.println(b);//99
}
}

(2)使用细节 78

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

//三元运算符使用细节
public class Test8
{
public static void main(String[] args)
{
int a = 3;
int b = 8;
//int c = a>b?1.1:3.4;//错误,类型不匹配
int c = a>b?(int)1.1:(int)3.4;//对

//表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换)
int d = 3;
int e = 8;
double f = d>e?d:e-3;//对,三元运算符可以自动转换,int->double
}
}

(3)三元运算符可以转成 if--else 语句 79

int res = a > b ? a++ : --b;

if ( a > b)

res = a++;

else

res = --b;

3. 小练习

//使用三元运算符,找出三个数中的最大值  79
public class Test8
{
public static void main(String[] args)
{
int n1 = 55;
int n2 = 33;
int n3 = 123;
int max1=n1>n2?n1:n2;
int max2=max1>n3?max1:n3;
System.out.println("最大数="+max2);

//使用一条语句实现
int max = (n1>n2?n1:n2)>n3?(n1>n2?n1:n2):n3;
System.out.println(max);
}
}

4. 优先级 80

(1) 优先级一览表

() {}等

单目运算符

算数运算符

位移运算符

比较运算符

逻辑运算符

三元运算符

赋值运算符

java运算符和Scanner和进制运算

java运算符和Scanner和进制运算

5. 标识符命名规则和规范 81

(1)命名规则

java运算符和Scanner和进制运算

(2) 命名规范 82

1) 包名:多单词组成时所有字母都小写:aaa.bbb.ccc //比如 com.hsp.crm

2) 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz [大驼峰]

比如: TankShotGame

3) 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [小 驼峰, 简称 驼峰法]

比如: tankShotGame

4) 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ

比如 :定义一个所得税率 TAX_RATE

5) 后面我们学习到 类,包,接口,等时,我们的命名规范要这样遵守,更加详细的看文档.

6.键盘输入语句

演示接受用户的输入

步骤

Scanner 类 表示 简单文本扫描器,在 java.util 包

1. 引入/导入 Scanner 类所在的包

2. 创建 Scanner 对象 , new 创建一个对象

myScanner 就是 Scanner 类的对象

3.接收用户输入,使用相关方法

import java.util.Scanner;//表示把java.util包下的Scanner类导入
//键盘输入语句
public class Test9
{
public static void main(String[] args)
{
//演示接受用户的输入
//步骤
//Scanner 类 表示 简单文本扫描器,在 java.util 包
//1. 引入/导入 Scanner 类所在的包
//2. 创建 Scanner 对象 , new 创建一个对象
// myScanner 就是 Scanner 类的对象
Scanner myScanner = new Scanner(System.in);
//3.接收用户输入,使用相关方法
System.out.println("请输入名字:");
String name = myScanner.next();
System.out.println("请输入年龄:");
int age = myScanner.nextInt();
System.out.println("请输入薪水:");
double sal = myScanner.nextDouble();
System.out.println("人的信息如下:");
System.out.println("名字="+name+" 年龄="+age+" 薪水="+sal);
}
}
//自我练习
//计算两个数的值
import java.util.Scanner;
public class Test9
{
public static void main(String[] args)
{
Scanner a = new Scanner(System.in);
System.out.println("请输入两个数字");
int x = a.nextInt();
int y = a.nextInt();
System.out.println("输入完毕,请输入是");
String really = a.next();
int b = x+y;
System.out.println("两数结果是:"+b);
}
}
//自我练习2
import java.util.Scanner;
public class Test9
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("请输入姓名");
String name = input.next();
System.out.println("请输入成绩");
double score = input.nextDouble();
System.out.println("姓名:"+name+" 成绩:"+score);
}
}
//自我练习3
import java.util.Scanner;
public class Test9
{
public static void main(String[] args)
{
String tmp = "15";
int b = Integer.parseInt(tmp);
System.out.println(b);//15
char d = tmp.charAt(1);
System.out.println(d);//字符5
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数字");
int a = input.nextInt();
int c = a/b;
System.out.println(c);
}
}

7.进制 87

7.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 不区分大小写。

//进制
public class Test9
{
public static void main(String[] args)
{
//二进制
int n1 = 0b1010;
//十进制
int n2 = 1010;
//八进制
int n3 = 01010;
//十六进制
int n4 = 0X10101;
System.out.println("n1="+n1);
System.out.println("n2="+n2);
System.out.println("n3="+n3);
System.out.println("n4="+n4);
}
}

8.进制转换 87

8.1 总结

java运算符和Scanner和进制运算

8.2 八进制转换成二进制

规则:将八进制数每 1 位,转成对应的一个 3 位的二进制数即可。

案例:请将 0237 转成二进制

02(010)3(011)7(111) = 0b10011111

8.3 十六进制转换成二进制

规则:将十六进制数每 1 位,转成对应的 4 位的一个二进制数即可。

案例:请将 0x23B 转成二进制

0x2(0010)3(0011)B(1011) = 0b001000111011

java运算符和Scanner和进制运算

java运算符和Scanner和进制运算

9.位运算 99

位运算:

java运算符和Scanner和进制运算

1)  算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位

2) 算术左移 <<: 符号位不变,低位补 0

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

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

>>(算数右移)

int a=1>>2; // 1=> 00000001=>00000000本质1/2/2=0

<<(算术左移)

int c=1<<2; // 1=> 00000001=>00000100本质1*2*2=4

>>>(无符号右移)

//位移操作符
public class Test9
{
public static void main(String[] args)
{
int a=1>>2;
int c=1<<2;
System.out.println(a);//0
System.out.println(c);//4
System.out.println(4<<3);//本质4*2*2*2=32
System.out.println(15>>2);//本质15/2/2=3
System.out.println(-1>>2);//-1
System.out.println(-1<<2);//-4
}
}

按位取反:~

按位与:&

按位或:|

按位异或:^,相同为0,不同为1

9.1 原码、反码、补码 98

java运算符和Scanner和进制运算

//位运算
public class Test9
{
public static void main(String[] args)
{
//1.先得到2的补码=> 2的原码 00000000 00000000 00000000 00000010
// 2的补码 00000000 00000000 00000000 00000010
//3.在得到3的补码 2的原码 00000000 00000000 00000000 00000011
// 3的补码 00000000 00000000 00000000 00000011
// 按位与&
// 00000000 00000000 00000000 00000010
// 00000000 00000000 00000000 00000011
//结果 00000000 00000000 00000000 00000010//运算后的补码,因为是正数,三码合一
System.out.println(2&3);//2
//1. 显得到-2 的原码 10000000 00000000 00000000 00000010
//2. -2的反码 11111111 11111111 11111111 11111101
//-2的补码 11111111 11111111 11111111 11111110
//~-2 00000000 00000000 00000000 00000001 运算后的补码,因为是正数,三码合一
System.out.println(~-2);//1
//2的原码反码补码相同,所以补码为00000000 00000000 00000000 00000010
//~2 11111111 11111111 11111111 11111101 运算后的补码,负数
//运算后的反码 11111111 11111111 11111111 11111100
//运算后的原码 10000000 00000000 00000000 00000011 //-3
System.out.println(~2);//-3
}
}

10.小练习

例1

//小练习
public class Test9
{
public static void main(String[] args)
{
System.out.println(-10.5%3);//等价于-10.5-(int)-10.5/3*3=-10.5-(-10)/3*3=-10.5+9=-1.5
//这个-1.5是一个接近-1.5的近似值
int i=66;
System.out.println(++i+i);//134 i=67+i=134

}
}

例2

//例2
//将String转成double,将char转成String语句
public class Test9
{
public static void main(String[] args)
{
String str = "18.8";
double d = Double.parseDouble(str);
System.out.println(d);
char c = '韩';
String tmp = c+"";
System.out.println(tmp);
}
}

例3

import java.util.Scanner;
public class Test9
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int a = input.nextInt();
String s=input.next();
double d=input.nextDouble();
System.out.println(a);
System.out.println(s);
System.out.println(d);
}
}