ITPub博客

首页 > 应用开发 > Java > JAVA基础学习-操作符学习总结

JAVA基础学习-操作符学习总结

Java 作者:喝水会长肉 时间:2021-12-10 18:05:13 0 删除 编辑

 4.1 算数操作符

  • 基本算数操作符: + - * /

  • 练习求和

使用 Scanner从控制台获取两个数字,然后计算这两个数字的和。


public 
class 
Main 
{

    public static void main ( String [ ] args ) {
       Scanner sc = new Scanner (System .in ) ;

       int a = sc . nextInt ( ) ;
       int b = sc . nextInt ( ) ;
       System .out . println (a +b ) ;
    }
}



  • 任意运算单元的长度超过int

如果有任何运算单元的长度超过int,那么运算结果就按照最长的长度计算:比如 int a = 5; long b = 6; a+b -> 结果类型是long


public 
class 
HelloWorld 
{

    public static void main ( String [ ] args ) {

       int a = 5 ;
       long b = 6 ;
       int c = (int ) (a +b ) ; //a+b的运算结果是long型,所以要进行强制转换
       long d = a +b ;
       
    }
}
  • 任意运算单元的长度小于int

如果任何运算单元的长度都不超过int,那么运算结果就按照int来计算: byte a = 1; byte b= 2; a+b -> int 类型


public 
class 
HelloWorld 
{

    public static void main ( String [ ] args ) {
       byte a = 1 ;
       byte b = 2 ;
       byte c = (byte ) (a +b ) ; //虽然a b都是byte类型,但是运算结果是int类型,需要进行强制转换
       int d = a +b ;
    }
}
  • %取模


public 
class 
HelloWorld 
{

    public static void main ( String [ ] args ) {

       int i = 5 ;
       int j = 2 ;
       System .out . println (i %j ) ; //输出为1
    }
}
  • 自增 自减

以++为例:int i = 5。 i++,先取值,再运算。++i,先运算,再取值。

  • 练习-自增

int i 
= 
1
;

int j = ++i + i ++ + ++i + ++i + i ++ ;

2 + 2 + 4 + 5 + 5 = 18

  • 练习-BMI

使用 Scanner收集你的身高体重,并计算出你的BMI值是多少

BMI的计算公式是 体重(kg) / (身高*身高)

比如邱阳波的体重是72kg, 身高是1.69,那么这位同学的BMI就是 72 / (1.69*1.69) = ?


package com
.company
;


import java .util .Scanner ;

public class Main {
   double bmi ;
    public void jsbmi ( ) {
        while ( true ) {
           Scanner scanner = new Scanner (System .in ) ;
           System .out . println ( "请输入身高(米):" ) ;
           double height = scanner . nextDouble ( ) ;
           System .out . println ( "请输入体重(kg):" ) ;
           double weight = scanner . nextDouble ( ) ;
           bmi = weight / (height * height ) ;

            if (bmi < 18.5 ) {
               System .out . println ( "当前的bmi:" + bmi + " " + "体重过轻" ) ;
            } else if ( 18.5 <= bmi && bmi < 24 ) {
               System .out . println ( "当前的bmi:" + bmi + " " + "正常范围" ) ;
            } else if ( 24 <= bmi && bmi < 27 ) {
               System .out . println ( "当前的bmi:" + bmi + " " + "体重过重" ) ;
            } else if ( 27 <= bmi && bmi < 30 ) {
               System .out . println ( "当前的bmi:" + bmi + " " + "轻度肥胖" ) ;
            } else if ( 30 <= bmi && bmi < 35 ) {
               System .out . println ( "当前的bmi:" + bmi + " " + "中度肥胖" ) ;
            } else {
               System .out . println ( "当前的bmi:" + bmi + " " + "重度肥胖" ) ;

            }
           System .out . println ( "是否结束循环(y/n)" ) ;
           String sc = scanner . next ( ) ;
        }
    }

    public static void main ( String [ ] args ) {
       Main bmi = new Main ( ) ;
       bmi . jsbmi ( ) ;
    }
}

4.2 关系操作符

关系操作符:比较两个变量之间的关系 > 大于 >= 大于或等于 < 小于 <= 小于或等于 == 是否相等 != 是否不等

4.3 逻辑操作符

  • 长路与 和 短路与

无论长路与还是短路与,两边的运算单元都是布尔值。 都为真时,才为真;任意为假,就为假。  区别: 长路与 两侧,都会被运算; 短路与 只要第一个是false,第二个就不进行运算了。


public 
class 
HelloWorld 
{

    public static void main ( String [ ] args ) {
        //长路与  无论第一个表达式的值是true或者false,第二个的值,都会被运算
       int i = 2 ;
       System .out . println ( i == 1 & i ++ == 2   ) ; //无论如何i++都会被执行,所以i的值变成了3
       System .out . println (i ) ;
        //java学习交流:737251827  进入可领取学习资源及对十年开发经验大佬提问,免费解答!
        //短路与 只要第一个表达式的值是false的,第二个表达式的值,就不需要进行运算了
       int j = 2 ;
       System .out . println ( j == 1 && j ++ == 2   ) ;   //因为j==1返回false,所以右边的j++就没有执行了,所以j的值,还是2
       System .out . println (j ) ;        
    }
}



  • 长路或 和 短路或

无论长路或还是短路或,两边的运算单元都是布尔值。 都为假时,才为假;任意为真,就为真。  区别: 长路或 两侧都会被运算;

短路或 只要第一个是true的,第二个就不进行运算了。


public 
class 
HelloWorld 
{

    public static void main ( String [ ] args ) {
        //长路或  无论第一个表达式的值是true或者false,第二个的值,都会被运算
       int i = 2 ;
       System .out . println ( i == 1 | i ++ == 2   ) ; //无论如何i++都会被执行,所以i的值变成了3
       System .out . println (i ) ;
       
        //短路或 只要第一个表达式的值是true的,第二个表达式的值,就不需要进行运算了
       int j = 2 ;
       System .out . println ( j == 2 || j ++ == 2   ) ;   //因为j==2返回true,所以右边的j++就没有执行了,所以j的值,还是2
       System .out . println (j ) ;    
    }
}
  • 取反:取反!真变为假,假变为真。

  • 异或^:不同,返回真;相同,返回假。

  • 练习-逻辑操作符

int i 
= 
1
;

boolean b = ! (i ++ == 3 ) ^ (i ++ == 2 ) && (i ++ == 3 ) ;
System .out . println (b ) ;
System .out . println (i ) ;

b = false;i = 3。

4.4 位操作符

  • 一个整数的二进制表达

位操作都是对二进制而言的,但是我们平常使用的都是十进制比如5;而5的二进制是101。

所以在开始学习之前,需要掌握一个整数的二进制表达是多少。

通过Integer.toBinaryString() 方法,将一个十进制整数转换为一个二进制字符串。


public 
class 
HelloWorld 
{

    public static void main ( String [ ] args ) {
       int i = 5 ;
       String b = (Integer . toBinaryString (i ) ) ; // 5的二进制的表达101
       System .out . println (i + " 的二进制表达是: " +b ) ;
    }
}
  • 位或

5的二进制是101;6的二进制是110。 所以 5|6 对每一位进行或运算,得到 111->7。


public 
class 
HelloWorld 
{

    public static void main ( String [ ] args ) {
       int i = 5 ;
       int j = 6 ;
       
       System .out . println (Integer . toBinaryString (i ) ) ; //5的二进制是101
       System .out . println (Integer . toBinaryString (j ) ) ; //6的二进制是110
       System .out . println (i |j ) ; //所以 5|6 对每一位进行或运算,得到 111->7
    }
}


  • 位与

5的二进制是101;6的二进制是110。

所以 5&6 对每一位进行与运算,得到 100->4。


public 
class 
HelloWorld 
{

    public static void main ( String [ ] args ) {    
       int i = 5 ;
       int j = 6 ;
       
       System .out . println (Integer . toBinaryString (i ) ) ; //5的二进制是10      
       System .out . println (Integer . toBinaryString (j ) ) ; //6的二进制是110    
       System .out . println (i &j ) ; //所以 5&6 对每一位进行与运算,得到 100->4
    }
}
  • 异或

5的二进制是101;6的二进制是110。

所以 5^6 对每一位进行异或运算,得到 011->3。

一些特别情况:任何数和 自己 进行异或都等于 0;任何数和 0 进行异或都等于 自己。


public 
class 
HelloWorld 
{

    public static void main ( String [ ] args ) {
       int i   = 5 ;
       int j = 6 ;
       System .out . println (Integer . toBinaryString (i ) ) ; //5的二进制是 101
       System .out . println (Integer . toBinaryString (j ) ) ; //6的二进制是110
       System .out . println (i ^j ) ; //所以 5^6 对每一位进行或运算,得到 011->3
       
       System .out . println (i ^ 0 ) ;
       System .out . println (i ^i ) ;
    }
}
  • 取非

5 的二进制是 00000101;所以取反即为 11111010。 这个二进制换算成十进制即为-6。


public 
class 
HelloWorld 
{

    public static void main ( String [ ] args ) {
       byte i   = 5 ;
       
       System .out . println (Integer . toBinaryString (i ) ) ; //5的二进制是00000101,所以取非即为11111010,即为-6
       System .out . println ( ~i ) ;
    }
}
  • 左移 右移

左移:根据一个整数的二进制表达,将其每一位都向左移动,最右边一位补0; 右移:根据一个整数的二进制表达,将其每一位都向右移动。


public 
class 
HelloWorld 
{

    public static void main ( String [ ] args ) {
       byte i   = 6 ;
       
        //6的二进制是110
       System .out . println (Integer . toBinaryString (i ) ) ;
        //6向左移1位后,变成1100,对应的10进制是12
       System .out . println (i << 1 ) ;
        //6向右移1位后,变成11,对应的10进制是3
       System .out . println (i >> 1 ) ;
    }
}
  • 练习-快速计算2x16

不用乘法符号(*) 计算 2x16


public 
class 
Main 
{

    public static void main ( String [ ] args ) {
       int i = 2 ;
       System .out . println (i << 4 ) ;
    }
}
  • 带符号右移与无符号右移

带符号右移 >> 对于正数, 带符号右移 >> 会把所有的位右移,并在最前面补0 对于负数, 带符号右移 >> 会把所有的位右移,并在最前面补1

无符号右移>>> 如果是一个负数,那么对应的二进制的第一位是1 无符号右移>>>会把第一位的1也向右移动,导致移动后,第一位变成0 这样就会使得负数在无符号右移后,得到一个正数

简单的说:

带符号右移 >> 移动后正的还是正的,负的还是负的, 符号不变;

**无符号右移>>>**移动后, 变正的了。


public 
class 
HelloWorld 
{

    public static void main ( String [ ] args ) {
       int i   = - 10 ;
       
        //-10的二进制是11111111111111111111111111110110
        //第一位是1,即符号位,代表这是一个负数
       System .out . println (Integer . toBinaryString (i ) ) ;
       
        //对于正数, 带符号右移 >> 会把所有的位右移,并在最前面补0
        //对于负数, 带符号右移 >> 会把所有的位右移,并在最前面补1
       
        //-10带符号右移1位,移动后前面补齐1
        //得到11111111111111111111111111111011
        //因为第一位是1,所以依然是一个负数,对应的十进制是-5
       int j = i >> 1 ;
       System .out . println (Integer . toBinaryString (j ) ) ;
       System .out . println (j ) ;
       
        //-10无符号向右移1位,符号位也会向右移,第一位就变成了0
        //得到01111111111111111111111111111011,对应的十进制是2147483643
       int k = i >>> 1 ;
       System .out . println (Integer . toBinaryString (k ) ) ;    
       
       System .out . println (k ) ;
    }
   
}
  • 练习-位操作符

int i 
= 
3
; 
// 二进制是11

int j = 2 ; // 二进制是10
int c = ( (i | j ) ^ (i & j ) ) << 2 >>> 1 ;

c = 2。

4.5 赋值操作符

+=即自加;其他的 -= , *= , /= , %= , &= , |= , ^= , >>= , >>>= 都是类似,不做赘述。

4.6 三元操作符

三元操作符 ?:

  • 三元操作符

表达式?值1:值2。如果表达式为真 返回值1;如果表达式为假 返回值2。


public 
class 
HelloWorld 
{

    public static void main ( String [ ] args ) {
       int i = 5 ;
       int j = 6 ;
       int k = i < j ? 99 : 88 ;

        // 相当于
        if (i < j ) {
           k = 99 ;
        } else {
           k = 88 ;
        }
       System .out . println (k ) ;
    }
}
  • 练习-判断是否是工作日

 
public 
static 
void 
main
(
String
[
] args
) 
{

        // TODO Auto-generated method stub
        IsWeekend ( ) ;
    }
    public static void IsWeekend ( ) {
       Scanner sc = new Scanner (System .in ) ;
       System .out . println ( "Please scan 1 to 7" ) ;
       int input = sc . nextInt ( ) ;
        if ( 1 <= input && 7 >= input ) {
           String day = input >= 6 ? "Weekend" : "WorkingDay" ;
           System .out . println (day ) ;
        } else {
           System .out . println ( "Scan worng, please reScan" ) ;
            IsWeekend ( ) ;
        }
    }

4.7 Scanner

  • 使用Scanner读取整数


import java
.util
.Scanner
;


public class HelloWorld {
    public static void main ( String [ ] args ) {
       Scanner s = new Scanner (System .in ) ;
       int a = s . nextInt ( ) ;
       System .out . println ( "第一个整数:" +a ) ;
       int b = s . nextInt ( ) ;
       System .out . println ( "第二个整数:" +b ) ;
    }
}
  • 使用Scanner读取字符串


import java
.util
.Scanner
;

 
public class HelloWorld {
    public static void main ( String [ ] args ) {
       Scanner s = new Scanner (System .in ) ;
       String a = s . nextLine ( ) ;
       System .out . println ( "读取的字符串是:" +a ) ;
    }
}
  • 读取了整数后,接着读取字符串

需要注意的是,如果在通过nextInt()读取了整数后,再接着读取字符串,读出来的是回车换行:"\r\n",因为nextInt仅仅读取数字信息,而不会 读取回车换行"\r\n"。

所以,如果在业务上需要读取了整数后,接着读取字符串,那么就应该连续执行两次nextLine(),第一次是取走回车换行,第二次才是读取真正的字符串


import java
.util
.Scanner
;

  //java学习交流:737251827  进入可领取学习资源及对十年开发经验大佬提问,免费解答!
public class HelloWorld {
    public static void main ( String [ ] args ) {
       Scanner s = new Scanner (System .in ) ;
       int i = s . nextInt ( ) ;
       System .out . println ( "读取的整数是" + i ) ;
       String rn = s . nextLine ( ) ;
       String a = s . nextLine ( ) ;
       System .out . println ( "读取的字符串是:" +a ) ;
    }
}





来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70010294/viewspace-2847105/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2021-11-19

  • 博文量
    199
  • 访问量
    86397