zoukankan      html  css  js  c++  java
  • Java语法基础(二)----运算符


    一、运算符:

    运算符包括下面几种:

    • 算术运算符
    • 赋值运算符
    • 比较运算符
    • 逻辑运算符
    • 位运算符
    • 三目运算符

    最不常用的是位运算符,但也是最接近计算机底层的。

    1、算术运算符

    7e0a206b-8e68-4aef-94cb-788c8efe9e9a

    (1)+的几种用法:加法、正数、字符串连接符

    (2)除法的时候要注意一个问题:整数相除,只能得到整数。要想得到小数,可以将数据自身*1.0,即将数据自身先转换为浮点型。

    2、赋值运算符

    符号     =    +=  -=   *=  /=   %=

    注:=为基本的赋值运算符,其他的为扩展的赋值运算符

    面试题:

    (1)short s=1, s = s+1;

    (2) short s=1, s+=1;

    上面两个代码有没有问题,如果有,哪里有问题?

    答案:代码(1)是有错误的,会损失精度,byte,short在定义的时候,他们接收的其实是一个int类型的值。这个是自己做了一个数据检测的,如果不再它们的范围内,就报错。效果如下:

    77065978-a6d8-4c0e-83b8-06db8189123f

    代码(2)没有错误,因为:扩展的赋值运算符其实隐含了一个强制类型转换

    也就是说,i += 1;  不是等价于 i = i + 1; 而是等价于 i = (i的数据类型)(s + 1);

    4fdcc992-4a24-4f3c-817c-94c56a5037c2

    3、关系运算符

    94258a13-eea5-4b92-a9b3-296ee81990a8

    注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。

    注2:比较运算符“==”不能误写成“=” 。举例:

    c0595988-bd31-4bde-b53a-0670ebeefbb7

    4、逻辑运算符

    57f680f2-65a2-4669-a087-c7e0aa6f2f40

    (1)逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。

    (2“&”和“&&”的区别?同理, “|”和“||”的区别?

    • A:最终结果都一样。例如:A和B必须同时为真,A&B、A&&B的结果才为真。
    • B:&&具有短路效果,左边是false,右边不执行。||具有短路效果,左边是true,右边不执行。

    注:开发中常用的逻辑运算符:  &&,||,!

    (3)异或( ^ )与或( | )的不同之处是:当左右都为true时,异或的结果为false。

    5、位运算符:

    76af9ede-28c2-432b-abed-7afb22890470

    虽然开发中用的不多,但会在很多源码中看到,因为计算机底层的计算都是位运算。

    面试题1:实现两个整数变量的交换

    代码如下:

     1 /*
     2     面试题:请自己实现两个整数变量的交换
     3 */
     4 class OperatorTest {
     5     public static void main(String[] args) {
     6         int a = 10;
     7         int b = 20;
     8         
     9         System.out.println("a:"+a+",b:"+b);
    10         
    11         //方式1:使用第三方变量(开发中用的)        
    12         int c = a;
    13         a = b;
    14         b = c;
    15         System.out.println("a:"+a+",b:"+b);
    16         System.out.println("------------");
    17         
    18         
    19         //方式2:用位异或实现(面试用)
    20         //左边:a,b,a
    21         //右边:a ^ b        
    22         a = a ^ b;
    23         b = a ^ b; //a ^ b ^ b = a
    24         a = a ^ b; //a ^ b ^ a = b
    25         System.out.println("a:"+a+",b:"+b);
    26         
    27         
    28         //方式3:用变量相加的做法        
    29         a = a + b; //a=30
    30         b = a - b; //b=10
    31         a = a - b; //a=20
    32         System.out.println("a:"+a+",b:"+b);
    33         *
    34         
    35         //方式4:一句话搞定
    36         b = (a+b) - (a=b); //b=30-20=10,a=20
    37         System.out.println("a:"+a+",b:"+b);
    38     }
    39 }

     

    面试题2:请用最有效率的方式写出计算2乘以8的结果。

    答案:2 * 8等价于2 << 3

    知识回顾:

    •     <<:左移    左边最高位丢弃,右边补齐0
    •     >>:右移    最高位是0,左边补齐0;最高为是1,左边补齐1
    •     >>>:无符号右移 无论最高位是0还是1,左边补齐0

    6、三目运算符:

    格式:(关系表达式)?表达式1:表达式2;

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

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

    示例:

    获取两个数中大数:

    int x=3,y=4,z;
    
    z = (x>y)?x:y;//z变量存储的就是两个数的大数。

    获取三个整数中的最大值:

     1         //方式一:分两步
     2         //A:先比较a,b的最大值
     3         //B:拿a,b的最大值在和c进行比较
     4         int temp = ((a > b)? a: b);
     5         //System.out.println(temp);
     6         int max1 = (temp > c? temp: c);
     7         System.out.println("max1:"+max1);
     8         
     9         //方式二:一步搞定
    10         int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c);
    11         //这种做法不推荐:
    12         //int max2 = a > b?a > c? a: c:b > c? b: c;
    13         //System.out.println("max2:"+max2);

    建议用方式一 。另外,方式二中,第10行和第12行是一样的,是三目运算符的嵌套使用。

    比较两个整数是否相等:

            //比较两个整数是否相等 
            int m = 100;
            int n = 200;
            
            //boolean flag = (m == n)? true: false;
            boolean flag = (m == n);
            System.out.println(flag);

    二 、键盘录入数据

    我们目前在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,我准备把数据改进为键盘录入,提高程序的灵活性。

    如何实现键盘录入数据呢?(目前先记住使用)

    (1)导包(位置放到class定义的上面):import java.util.Scanner;

    (2)创建键盘录入对象:Scanner sc = new Scanner(System.in);

    (3)通过对象获取数据:int x = sc.nextInt();

    代码举例:

    23f4b3f9-a466-4f4a-bab0-25d991797199

    我的公众号

    想学习代码之外的软技能?不妨关注我的微信公众号:生命团队(id:vitateam)。

    扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外:

  • 相关阅读:
    STM32的CRC32 软件实现代码
    AES CBC/CTR 加解密原理
    Either, neither, both
    Answer Sheet
    Both
    How to convert a byte to its binary string representation
    how convert large HEX string to binary array ?
    TEA -- Tiny Encryption Algorithm
    DES
    IAR EWARM Checksum Technical Note
  • 原文地址:https://www.cnblogs.com/qianguyihao/p/4143725.html
Copyright © 2011-2022 走看看