Java学习-第一部分-第一阶段-第三节:运算符

运算符

笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)

运算符介绍

算数运算符

运算符 运算 范例 结果
+ 正号 +7 7
- 负号 b=11; -b -11
+ 9+9 18
- 10-8 2
* 7*8 56
9/9 1
% 取模(取余) 11%9 2
++ 自增(前):先运算后取值
自增(后):先取值后运算
a=2;b=++a;
a=2;b=a++;
a=3;b=3
a=3;b=2
-- 自减(前):先运算后取值
自减(后):先取值后运算
a=2;b=--a
a=2;b=a--
a=1;b=1
a=1;b=2
+ 字符串相加 "hsp" +"edu" "hspedu"
**
*演示算术运算符的使用
*/
public class ArithmeticOperator {
    //编写一个main方法
    public static void main(String[] args) {
        ///使用
        System.out.print1n(10 / 4);//从数学来看是2.5,java中 2
        System.out.println(10.0 / 4);//java是2.5
        //注释快捷键ctrl +/,再次输入ctrl +/取消注释 
        //double d = 10 / 4;
        //System.out.println(d);
        //注释快捷键ctrl +/,再次输入ctrl +/取消注释
        double d = 10/4;//java中10/ 4 = 2,2=>2.0
        System.out.println(d);//是2.0
        
        //%取模,取余
        //在%的本质看一个公式a % b = a - a/ b * b
        //-10 %3 =>-10 -(-10)/3 * 3 = -10 + 9= -1
        // 10 %-3 = 10 - 10/(-3)*(-3) = 10 - 9 = 1
        // -10 % -3=(-10) - (-10)/ (-3)*(-3)= -10 +9 = -1
        System.out.print1n(10 % 3);//1
        System.out.println( -10 %3);// -1
        System.out.println(10 % -3);// 1
        System.out.println( -10%-3);//-1
        
        //++的使用
        //
        int i = 10;
        i++;//自增等价于i = i + 1;=>i = 11
        ++i;//自增等价于i = i + 1;=> i = 12
        System.out.println( "i=" + i);//12
        
        /*
        作为表达式使用
        前++∶++i先自增后赋值
        后++∶ i++先赋值后自增
        */
        int j = 8;
        int k = ++j;//等价j=j+1;k=j;
        int k = j++;//等价k =j;j=j+1;
        System.out.println("k="+k+“j="+j);
    }
}

面试题

1.面试题1
int i=1;
i=i++;       //规则使用临时变量:(1) temp=i;(2) i=i+1;(3)i=temp;
System.out.println(i);
问:结果是多少?为什么?

2.面试题2
int i=1;
i=++i;   //(1) i=i+1;(2) temp=i;(3)i=temp;
System.out.println(0);

答案:
1
2

练习题

//自增,自减练习    
int i1 = 10;
int i2 =20;
int i= i1++;
System.out.print("i="+i);    //10
System.out.println("i2="+i2);    //20
i = --i2;
System.out.print("i="+i);    //19
System.out.println("i2="+i2);    //19

练习题2

  1. 假如还有59天放假,问:合xx个星期零xx天

    int i=59;
    System.out.println(59/7+"星期零"+59%7+"天");
    
  2. 定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏
    温度-100),请求出华氏温度对应的摄氏温度。[234.5]

    double i=234.5;
    double x;
    x=(i-100)*5/9;
    System.out.println(x);
    

关系运算符

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

  2. 关系表达式经常用在if结构的条件电或循环结构的条件中

关系运算符一览

运算符 运算 范例 结果
== 相等于 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;//老韩提示:开发中,不可以使用a, b
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);

细节说明

  1. 关系运算符的结果都是boolean型,也就是要么是true,要么是false.
  2. 关系运算符组成的表达式,我们称为关系表达式。a >b
  3. 比较运算符"==“不能误写成"="

逻辑运算符

介绍

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

逻辑运算符一览

分为两组学习

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

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

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

&&和&基本规则

名称 语法 特点
短路与&& 条件1&&条件2 两个条件都为true,结果为true
逻辑与& 条件1&条件2 两个条件都为true,结果为true

&&和&案例演示

//&&短路与和&案例演示
int age = 50;
if(age > 20 8&& age < 90) {
    System.out.println("ok100");
}
//&逻辑与使用
if(age > 20 & age < 90){
    System.out.println("ok200");
}

//&逻辑与使用
if(age > 20 & age < 90){
    System.out.println( "ok200");
}
//区别
int a = 4;
int b = 9;
//对于&&短路与而言,如果第一个条件为false ,后面的条件不再判断
if(a < 1 && ++b <50){
    System.out.println("ok300");
}
System.out.println( "a=" +a + " b=" + b);// 4 9
//对于&逻辑与而言,如果第一个条件为false ,后面的条件仍然会判断
if(a < 1 & ++b <50){
    System.out.println("ok300");
}
System.out.println( "a=" +a + " b=" + b);// 4 9

&&和&使用区别

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

||和|基本规则

名称 语法 特点
短路或|| 条件1||条件2 两个条件中只要有一个成立,结果为true
逻辑或| 条件1|条件2 只要有一个条件成立,结果为true

||和|案例演示

int a = 4;int b = 9;
if( a > 1 | ++b >4){
    System.out.println( "ok300");
}
    System.out.print1n( "a=" + a + " b=" + b); //4 10

||和|使用区别

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

!取反 基本规则名称

名称 语法 特点
!非(取反) !条件 如果条件本身成立,结果为false,否则为true

!案例演示

//!操作是取反 T->F,F ->T
System.out.println(60 >20);//T
System.out.println(!(60 >20));/ /F
//a^b:叫逻辑异或,当a和b 不同时,则结果为true,否则为false
boolean b = (10 >1)^(3 > 5);
System.out.println( "b=" + b);//T

^案例演示

a^b:叫逻辑异或,当a和b 不同时,则结果为true,否则为false

^逻辑异或,System.out.printIn( (4<1)^(6> 3));//?

练习题

//1
int x = 5;
int y=5;
if(x++==6 & ++y==6){//逻辑与
    x= 11;
}
System.out.println("x="+x+",y="+y);//6 6

//2
int x= 5,y= 5;
if(x++==6 && ++y==6){
    x= 11;
}
System.out.println("x="+x+",y="+y);//6 5

//3
int x = 5,y = 5;
if(x++==5 | ++y==5){
    x =11;
}
System.out.println("x="+x+",y="+y);//11 6

//4
int x = 5,y = 5;
if(x++==5||++y==5){
    x =11;
}
System.out.println("x="+x+",y="+y);//11 5

赋值运算符

介绍

赋值运算符就是将某个运算后的值,赋给指定的变量。

赋值运算符的分类

基本赋值运算符 =

复合赋值运算符

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

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

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

案例演示

int n1 = 10;
n1 += 4;// n1 = n1 +4;
System.out.println(n1); // 14
n1 /= 3;// n1 = n1/ 3;//4
System.out. println(n1); // 4
  1. 赋值基本案例[int num1 = 10]
  2. +=的使用案例

赋值运算符特点

  1. 运算顺序从右往左int num = a +b +c;
  2. 赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
    int num = 20; int num2= 78*34 - 10; int num3 = a;
  3. 复合赋值运算符等价于下面的效果
    比如:a+=3;等价于a=a+3;
  4. 复合赋值运算符会进行类型转换。
    byte b = 2; b+=3; b++;
int n1 = 10;
n1 += 4;// n1 = n1 +4;
System.out.println(n1);// 14
n1 /= 3; // n1 = n1 / 3;//4
System. out.print1n(n1);// 4
//复合赋值运算符会进行类型转换
byte b = 3;
b += 2;//等价b = (byte)(b+2);
b++;// b = (byte)(b+1);

三元运算符

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

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

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

●案例演示

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

使用细节

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

  2. 三元运算符可以转成if--else语句
    int res = a >b ? a++:--b;

运算符优先级

  1. 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
  2. 只有单目运算符、赋值运算符是从右向左运算的。
1 括号 ()、[ ]、.
2 非、正,负号 !、+(正)、-(负)
3 自增,自减 ++、--
4 乘,除,取余 *、/、%
5 加,减 +、-
6 移位运算 <<、>>、>>>
7 大小关系 <、<=、>、>=
8 相等关系 ==、!=
9 按位与 &
10 按位异或(在java中,这不是幂次方的符号) ^
11 按位或 |
12 逻辑与(短路与) &&
13 逻辑或(短路或) ||
14 条件运算(三目运算) ? :
15 赋值运算 =、+=、-=、*=、/=、%=
16 位赋值运算 &=、|=、^=、~=、<<=、>>=、>>>=

标识符的命名规则和规范

标识符概念

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

标识符的命名规则(必须遵守)

  1. 由26个英文字母大小写,0-9,或$组成
  2. 数字不可以开头。int 3ab = 1;//错误
  3. 不可以使用关键字和保留字,但能包含关键字和保留字(l例如:aclasss)
  4. Java中严格区分大小写,长度无限制。int totalNum = 10; int n = 90;
  5. 标识符不能包含空格。int a b = 90;

判断下面变量名是否正确

hsp //T
hsp12 //T
1hsp //F
h-s //F
x h //F
h$4 //T
class //F
int //F
double //F
public //F
static //F
goto //F
stu_name //F

标识符命名规范[更加专业]

  1. 包名:多单词组成时所有字母都小写: aaa.bbb.ccc//比如com.hsp.crm
  2. 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz【大驼峰】
    比如:TankShotGame
  3. 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz【小驼峰】
    比如:tankShotGame
  4. 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
    比如:定义一个所得税率TAX_RATE
  5. 后面我们学习到类,包,接口,等时,我们的命名规范要这样遵守,更加详细的看文档。

键盘输入语句

介绍

在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。
需要一个扫描器((对象),就是 Scanner

步骤:

  1. 导入该类的所在包,java.util.*
  2. 创建该类对象(声明变量)
  3. 调用里面的功能

案例演示:

​ 要求:可以从控制台接收用户信息,【姓名,年龄,薪水】。

import java.util.Scanner;//表示把java.util下的Scanner类导人
public class Input{
    //编写一个main方法
    public static void main(Stringl]args){
        //演示接受用户的输入//步骤
        //Scanner类表示简单文本扫描器,在java.util包
        //1.引入/导入Scanner类所在的包
        //2.创建Scanner 对象, new创建一个对象,体会
        //myScanner就是Scanner类的对象
        Scanner myScanner = new Scanner(System.in);
        //3.接收用户输入了,使用相关的方法
        System.out.print1n("请输入名字");
        //当程序执行到 next方法时,会等待用户输入~~~
        String name = myScanner.next();//接收用户输入字符串System.out.println("请输入年龄");
        int age = myScanner.nextInt();//接收用户输入intSystem.out.println("请输入薪水");
        double sal = myScanner.nextDouble();//接收用户输入doubleSystem.out.println("人的信息如下:");
        System.out.println("名字"+name+“年龄=”+age +“薪水=” +sal);
    }
}

进制

进制介绍
对于整数,有四种表示方式:

  1. 二进制:0,1,满2进1.以Ob或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不区分大小写。

举例说明

int n1 = 0b1010;
int n2 =1010;
int n3 = 01010;
int n4 = 0x10101;
System.out.println("n1=" + n1);
System.out.println("n2=" + n2);
System.out.print1n("n3=" + n3);
System.out.println("n4=" + n4);

进制的转换(基本功)

进制转换的介绍

第一组:

  1. 二进制转十进制

    0b1011=1*20+1*21+0*22+1*23=11

  2. 八进制转十进制

    0234=4*80+3*81+2*82=4+24+128=156

  3. 十六进制转十进制

    0x23A=10*160+3*161+2*162=10+48+512=570

第二组:

  1. 十进制转二进制

    34/2=17...............0
    17/2=8.................1
    8/2=4....................0
    4/2=2....................0
    2/2=1....................0

    0b100010

  2. 十进制转八进制

    131/8=16..............3
    16/8=2...................0

    0203

  3. 十进制转十六进制

    237/16=14...............13------->D
    14-------->E

    0XED

第三组

  1. 二进制转八进制

    0b11010101=>11(3) 010(2) 101(5)=>0325

  2. 二进制转十六进制

    0b11010101=>1101(D) 0101(5)=0xD5

第四组

  1. 八进制转二进制

    0x0237=2(010)3(011)7(111)=0b10011111

  2. 十六进制转二进制

    0x23B=2(0010)3(0011)B(1011)=0B1000111011

二进制在运算中的说明

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

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

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

网上对原码,反码,补码的解释过于复杂,我这里精简几句话:对于有符号的而言:

  1. 二进制的最高位是符号位:0表示正数, 1表示负数(口诀: 0->0 1-> -)

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

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

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

  5. 0的反码,补码都是0

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

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

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

位运算

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

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

按位与&:两位全为1,结果为1,否则为0
按位或|:两位有一个为1,结果为1,否则为0
按位异或^:两位一个为0,一个为1,结果为1,否则为0
按位取反~:0->1,1->0 (在代码中~是对补码进行操作)
比如: 2&3=? ~-2 =? ~2=? 2|3=? 2^3=?

√完成前面的案例!

●还有3个位运算符>>、<<和>>>,运算规则:

  1. 算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
  2. 算术左移<<;符号位不变,低位补0
  3. >>>逻辑右移也叫无符号右移,运算规则是:低位溢出,高位补0
  4. 特别说明:没有<<<符号

●应用案例

int a=1>>2;//1=>000000|01=>本质1/2/2=0

int c=1<<2;//1=>0000001|00=>本质1*2*2=4
●完成前面的案例

建议:讲解的即可,不用再深入。

本章习题

  1. 计算下列表达式的结果

    10/3= 3 ; 10/5 = 2 ; 10%2=0 ; -10.5%3 = ?;

    解析:

    //a % b当a是小数时,公式=a - (int)a / b * b
    //-10.5%3 = -10.5 -(-10)/3 * 3 = -10.5 +9 = -1.5
    //注意:有小数运算,得到结果是近似值

  2. 试说出下面代码的结果

    int i=66;
    System.out.println(++i+i);//执行i=i+1=>i=67 =>134

  3. 在Java中,以下赋值语句正确的是(C D)。

    A) int num1=(int)"18"; //错误应该Integer.parselnt("18");
    B) int num2=18.0; //错误double,-> int
    C) double num3=3d; //ok
    D)double num4=8; //ok int -> double
    E) int i=48; char ch = i+1; //错误int ->char
    F) byte b = 19; short s = b+2; //错误int ->short

4.试写出将String转换成double类型的语句,以及将char类型转换成String的语句,举例说明即可,写简单代码

String str = "18.8";1/注意字符串要可以被转成double
double d1 = Double.parseDouble(str);

char c1 ='韩";
String str2 = c1+ "";

posted @ 2022-06-19 02:50  文杰2000  阅读(151)  评论(0编辑  收藏  举报