Day002_运算符、键盘录入、类型转换

1.算术运算符

1.运算符:对常量或者变量进行操作运算的符号
2.表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
3.算术运算符:

符号

作用

说明

+

加法运算,字符串连接运算

-

减法运算

*

乘法运算,与“×”相同

/

除法运算,与“÷”相同

%

取余

获取的是两个数据做除法的余数

 

  /和%的区别:被除数 ÷ 除数 = 商(/: 获取除法运算中的商) ... 余数(%: 获取除法运算中的余数)。
整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。

        System.out.println( 1 + 1);    // 2
        System.out.println( 1 - 1);    // 0
        System.out.println( 1 * 2);    // 2
        System.out.println( 6 / 2);    // 3
        System.out.println( 6 % 4);  // 2
View Code

 例:获取一个四位数字的个位,十位,百位,千位上的数字分别是多少呢?

// 两个整数相除,结果得到的是整数。
        int num = 1234;
        System.out.println(num % 10);   // 4
        System.out.println(num / 10 % 10);  // 先除 10 得到结果 123 在取余 10 得到 3
        System.out.println(num / 100 % 10);  // 先除 100 得到结果 12 在取余 10 得到 2
        System.out.println(num / 1000);  // 最后这个直接除以 1000 得到 1
View Code

 4.字符串 + 操作:

  1)当“+”操作中出现字符串时,这个”+”是字符串连接符,而不是算术运算。

  2)在”+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算。当连续进行“+”操作时,从左到右逐个执行。 

// 先计算 1 + 2 = 3 ,两个是整数按相加计算
// 3 + " Hello World "  ,整数和字符串相加,为字符串。
// 3 Hello World + 3 + 4 ,整数和字符串相加,为字符串。
// 3 Hello World 34
1 + 2 + " Hello World " + 3 + 4

1.2 自增自减运算

符号

作用

说明

++

自增

变量的值加1

--

自减

变量的值减1

1. ++ 和 ––
  既可以放在变量的前边: ++a, --a
  也可以放在变量的后边: a++, a--

2.使用区别

  单独使用: ++/--自己独占一行,不和其它操作一起进行运算
    前++和后++效果一样:都是让变量的值增加1 ++a 和 a++ 都是让变量a的值增加1
    前--和后--效果一样:都是让变量的值减少1 --a和a--都是让变量a的值减少1

        int a = 1 ,b =1;
        ++a;
        System.out.println("a = " + a);
        --a;
        System.out.println("a = " + a);
        b++;
        System.out.println("b = " + b);
        b--;
        System.out.println("b = " + b);
View Code

  混合使用: ++/--和其它操作(赋值/打印输出)一起进行运算
    ++/--写在前面【先++/--,再使用】:
      先把变量值增加1(++)或者减少1(--),然后把变量增加1(++)或者减少1(--)的结果进行其它运算
    ++/--写在后面【先使用,再++/--】:
      先使用变量增加1(++)或者减少1(--)之前的数据,然后变量的值再增加1(++)或者减少1(--)

        int b = 1;
        // 先打印 b的值 1, 在自增
        System.out.println("b++ 值:" + b++); // 1
        System.out.println("b值:" + b); // 2
        // 先自增,在打印 b 的值 3
        System.out.println("++b 值:" + ++b); //3
        System.out.println("b 值:" + b);
View Code

2.赋值运算

1. 赋值运算符:

符号

作用

说明

=

赋值

a=10,将10赋值给变量a

+=

加后赋值

a+=b,将a+b的值给a

-=

减后赋值

a-=b,将a-b的值给a

*=

乘后赋值

a*=b,将a×b的值给a

/=

除后赋值

a/=b,将a÷b的商给a

%=

取余后赋值

a%=b,将a÷b的余数给a

        //赋值: += -= *= /= %=
        int a1 = 10, b1 = 20, c1 = 30, d1 = 40;
        a1 += b1;
        System.out.println("a1 = " + a1);
        b1 /= c1;
        System.out.println("b1 = " + b1);
        c1 %= d1;
        System.out.println("c1 = " + c1);
        System.out.println("赋值运算-----");
View Code

 

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

  作用:用来比较两个数据之间的大小关系,结果是boolean类型的数据

  特点:关系表达式不管多么复杂,或者多么简单,最终结果要么是true(成立),要么是false(不成立)

   分类:

符号

说明

==

a==b,判断a和b的值是否相等,成立为true,不成立为false

!=

a!=b,判断a和b的值是否不相等,成立为true,不成立为false

>

a>b,判断a是否大于b,成立为true,不成立为false

>=

a>=b,判断a是否大于等于b,成立为true,不成立为false

<

a<b,判断a是否小于b,成立为true,不成立为false

<=

a<=b,判断a是否小于等于b,成立为true,不成立为false

 

        //关系运算: > >= < <=  == !=
        int a2 = 10, b2 = 20;
        System.out.println(a2 > b2);
        System.out.println(a2 >= b2);
        System.out.println(a2 < b2);
        System.out.println(a2 <= b2);
        System.out.println(a2 == b2);
        System.out.println(a2 != b2);
        System.out.println("关系运算-----");
View Code

 

4.逻辑运算 

1.逻辑运算符:

符号

作用

说明

&

逻辑与

a & b,a和b都是true,结果为true,否则为false

|

逻辑或

a | b,a和b都是false,结果为false,否则为true

^

逻辑异或

a  ^ b,a和b结果不同为true,相同为false

!

逻辑非

!a,结果和a的结果正好相反

&&

短路与

作用和&相同,但是有短路效果

||

短路或

作用和|相同,但是有短路效果

 

        //逻辑运算:  & | ! ^
        int a3 = 10, b3 = 20, c3 = 30;
        System.out.println(a3 > b3 & a3 > c3);
        System.out.println(a3 < b3 & a3 < c3);
        System.out.println(a3 > b3 & a3 < c3);
        System.out.println(a3 < b3 & a3 > c3);
        System.out.println("逻辑运算----- &");

        System.out.println(a3 > b3 | a3 > c3);
        System.out.println(a3 < b3 | a3 < c3);
        System.out.println(a3 > b3 | a3 < c3);
        System.out.println(a3 < b3 | a3 > c3);
        System.out.println("逻辑运算----- |");

        System.out.println(a3 > b3 ^ a3 > c3);
        System.out.println(a3 < b3 ^ a3 < c3);
        System.out.println(a3 > b3 ^ a3 < c3);
        System.out.println(a3 < b3 ^ a3 > c3);
        System.out.println("逻辑运算----- ^");

        System.out.println(!(a3 > b3 & a3 > c3));
        System.out.println(!(a3 < b3 & a3 < c3));
        System.out.println(!(a3 > b3 & a3 < c3));
        System.out.println(!(a3 < b3 & a3 > c3));
        System.out.println("逻辑运算----- !");
View Code

 

2.短路与,短路或 和 逻辑与,逻辑或的区别:

  逻辑与&:无论左边真假,右边都要执行。
  短路与&&:如果左边为真,右边执行;如果左边为假,右边不执行。

  逻辑或 | :无论左边真假,右边都要执行。
  短路或 || :如果左边为假,右边执行;如果左边为真,右边不执行。

        int a = 10, b = 20, c = 30, d = 40;
        // 逻辑与 不管成立不成立,两边都要执行,所以 a 结果为 11
        System.out.println((2 > 3) & (++a > 10));
        // 短路与 第一个条件为false,右边条件不执行,所以结果为 20
        System.out.println((2 > 3) && (++b > 20));
        System.out.println("a : " + a + "    " + "b:" + b);

        // 逻辑或 不管成立不成立,两边都要执行,所以 c 结果为 31
        System.out.println((2 < 3) | (++c > 30));
        // 短路或 第一个条件为true,右边条件不执行,所以 d 结果为 40
        System.out.println((2 < 3) || (++d > 40));
        System.out.println("c : " + c + "    " + "d:" + d);

 

3.运算符优先级

  在表达式中,哪个运算符先执行后执行是要看优先级的,例如 “*、/” 的优先级高于

 

5.三元运算

  格式一:数据类型 变量名称 = 布尔表达式1 ? 表达式2 : 表达式3;
  格式二:数据类型 变量名称 = 布尔表达式1 ? 表达式2 : (布尔表达式1 ? 表达式2 : 表达式3);
  格式三:数据类型 变量名称 = a >(布尔表达式1 ? 表达式2 : 表达式3) ? 表达式2 : (布尔表达式1 ? 表达式2 : 表达式3);

  注意:  ?号前面的式子的结果必须是布尔类型

  执行流程:     

    (1)计算布尔表达式1的结果,看是true,还是false
    (2)如果布尔表达式1的结果是true,取表达式2的结果赋值给左侧的变量
    (3)如果布尔表达式1的结果是false,取表达式3的结果赋值给左侧的变量

 

例:有三个数字,计算最大值。a = 10 ,b = 20 , c = 30 。

        // 三元运算:
        int a = 10, b = 20, c = 30;
        //int max = a > (b>c?b:c) ? a : (b>c?b:c);
        int max = a > (b>c?b:c) ? a : (b>c?b:c);
        System.out.println("max = " + max);

 

6.键盘输入

数据输出: 把程序的运行结果输出到控制台,从而显示到屏幕上
数据输入: 获取键盘录入的数据到程序中,从而在程序中对数据进行相关的运算

1. 实现键盘录入的三个步骤?

  1)导包

import java.util.Scanner;

  2)创建对象

Scanner sc = new Scanner(System.in);

  3)接收数据

int a1 = sc.nextInt();
import java.util.Scanner; //导包

public class LuRu {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); //创建对象
        System.out.print("输入第一个整数:");
        int a1 = sc.nextInt(); // 接收数据
        System.out.print("输入第二个整数:");
        int a2 = sc.nextInt();
        System.out.print("输入第三个整数:");
        int a3 = sc.nextInt();

        int temp = a1 > a2 ? a1 : a2;
        int max = temp > a3 ? temp : a3;
        System.out.println("最大值是:" + max);


    }
}

 

 7.类型转换

Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。
举例:
  int + int: 类型一直,可以直接计算
  int + long: 类型不一致,不可以直接计算

解决方案一:
  int + long --> long + long : 转换后类型一直,可以直接计算
  把int类型转换成long类型,从小到大,叫做自动类型转换(自动完成)
解决方案二:
  int + long --> int + int: 转换后类型一直,可以直接计算
  把long类型转换成int类型,从大到小,叫做强制类型转换(不会自动完成,必须手动处理)

1.自动类型转换概念:

  取值范围小的数据/变量,可以直接赋值给取值范围大的变量。
特点:
  (1)是自动完成的,不需要代码的特殊处理
  (2)byte/short/char类型计算时会自动转换为int类型计算。
  (3)转换规则: byte、short、char-->int-->long-->float-->double
  总结:整个表达式中的所有类型,都会自动转换成表达式中最大的类型,结果也是最大的类型

public static void main(String[] args) {
        int i = 1;
        byte b = 2;
        /*
            b是byte类型(占1个字节),i是int类型(占4个字节),类型不一致,
            会发生自动类型转换,把byte类型的b,转换成int类型(左侧补充3个字节的0)
            byte + int --> int + int --> int
                结果为int类型(占4个字节),不能直接赋值给左侧byte类型(占1个字节)的变量
         */
        // byte x = b + i; //报错

        /*
            b是byte类型(占1个字节),i是int类型(占4个字节),类型不一致,
            会发生自动类型转换,把byte类型的b,转换成int类型(左侧补充3个字节的0)
            byte类型的b的2: 00000010
            int类型的b的2: 00000000 00000000 00000000 00000010

            byte + int --> int + int --> int
                结果为int类型(占4个字节),可以直接赋值给左侧int类型(占4个字节)的变量
         */
        int y = b + i; 
        System.out.println(y);
    }
例1

 

2.强制类型转换:

强制类型转换概念:取值范围大的数据或者变量,不能直接赋值给取值范围小的变量,必须进行强制类型转换
格式:转后类型 变量名称 = (转后类型)转前数字 或 变量;
问题:可能损失精度

例子: 

public class zuoye {
    public static void main(String[] args) {
        int a = 2345;
        /*
        正常:
        int类型(4个字节)强制类型转换成short类型
        十进制 2345:    
        对应的二进制是 00000000 00000000 00001001 00101001
            砍掉左侧的2个字节的内容,目前砍掉都是0,对数据大小没有影响
            00001001 00101001  // 2345 
         */
        short s = (short) a;
        System.out.println(s);

        /* 
        有问题:
        int类型(4个字节)强制类型转换成byte类型。
        十进制 2345:    
        对应的二进制是 00000000 00000000 00001001 00101001
            砍掉左侧的3个字节的内容,砍掉的有1,就会影响数据大小
            00101001 // 41
         */
        byte b = (byte) a;
        System.out.println(b);
    }
}

 

 8.ASCII码表

计算机是一个二货,只能存储0和1,所以存储到计算机中的所有内容都会转换成0和1进行存储,所以我们在计算机中存储的字符也不例外,也需要把字符转换成0和1进行存储

编码表:就是将人类的文字和一个十进制数进行对应起来组成一张表格。
存储字符时:需要查找ASC码表,找到字符对应的数字,将数字转换为二进制数存放到计算机中
使用字符时:将对应的二进制数转换为十进制 找到ASC表中对应的字符 显示出来

 

 

9.int类型和char类型的运算原理

char类型和int类型不一致,会发生自动类型转换
byte/short/char类型,会自动类型转换为int类型

如何把char类型自动转换成int类型,查看ASCII码表。
  例 : 'a' 对应 ASXCII表的十进制为 97 。转换成int类型后 'a' 就变成 97

public class zuoye {
    public static void main(String[] args) {
        char c = 'a';
        System.out.println(c);
        // 'a' + 1 后就是 98
        System.out.println("c = " + (c + 1));
        // c + 1 是 99 ,转换成 char 后为 b
        System.out.println((char)(c + 1));//b

    }
}

 

 

 

 

 

  

posted @ 2022-05-20 16:30  Amoヽ柠檬  阅读(110)  评论(0)    收藏  举报