Java零基础—运算符

运算符

运算符有优先级,不确定的就加括号。按功能划分主要运算符如下:

算术运算符

常见的加减乘除,再加上取余

/*
  + 求和   - 相减
  * 乘积   / 商
  % 求余数
  ++ 自加  -- 自减
*/
public static void main (String[] args){
    int i = 10;
    int j = 3;
    System.out.println( i + j );//13
    System.out.println( i - j );//7
    System.out.println( i * j );//30
    System.out.println( i / j );//3
    System.out.println( i % j );//1

    //++ 运算可以出现在变量前,也可以出现在变量后。
    int k = 10;
    k ++;//单目运算符
    System.out.println(k);//11
    
    int y = 10;
    ++ y;
    System.out.println(y);//11

    int a = 100;
    int b = a ++;//先赋值,再自加1
    System.out.println(a);//101
    System.out.println(b);//100

    int c = ++ a;//先自加,在赋值
    System.out.println(a);//102  
    System.out.println(c);//102
    
    int d = 10;
    System.out.println(d ++);//10
    int e = 10;
    System.out.println(++ e);//11

}

关系运算符

关系运算符比较的是运算符两边的变量保存的值,运算结果一定是布尔类型true/false。


/*
  > 大于、>= 大于等于、< 小于、<= 小于等于、== 等于、!= 不等于
*/
public static void main(String[] args){
    int a = 10;
    int b = 10;
    System.out.println( a > b );//false
    System.out.println( a >= b );//true
    System.out.println( a < b );//false
    System.out.println( a <= b );//true
    System.out.println( a == b );//true
    System.out.println( a != b );//false
}

逻辑运算符

逻辑运算符要求两边的算子都是布尔类型,并且最终的运算结果也是布尔类型。


/*
  & 逻辑与    | 逻辑或
  ! 逻辑非    ^ 逻辑异或
  && 短路与   || 短路或
*/
public static void main(String[] args){
    // & 两边的算子都是true,结果才是true
    System.out.println(true & true); //true
    System.out.println(true & false); //false
    System.out.println(false & true); //false
    System.out.println(false & false); //false

    // | 两边的算子,只要有一个是true,结果就是true
    System.out.println(true | true); //true
    System.out.println(true | false); //true
    System.out.println(false | true); //true
    System.out.println(false | false); //false

    // ! 取反,单目运算符
    System.out.println( !false );//true
    System.out.println( !true );//false

    // ^ 两边的算子只要不一样,结果就是true
    System.out.println(true ^ true); //false
    System.out.println(true ^ false); //true
    System.out.println(false ^ true); //true
    System.out.println(false ^ false); //true

    //短路与和逻辑与最终的运算结果是相同的、短路或和逻辑或最终的计算结果也是相同的,只不过短路与、短路或存在短路现象。短路现象概况为:根据左边算子可以确定最终结果,那边就不再运算右边算子
    int x = 10;
    int y = 8;
    int m = 10;
    int n = 8;
    System.out.println( x < y & ++x < y);
    System.out.println(x);//11
    System.out.println( m < n && ++m < n);
    System.out.println(m)//10
}

逻辑与和短路与、逻辑或和短路或,根据实际需求选择,没有绝对的用或不用。

赋值类运算符

先执行等号右边的表达式,将执行结果赋值给左边的变量。

基本的赋值运算符


/*
   =
*/
public static void main(String[] args){
    int i = 5;
    System.out.println(i);//5
    i = i + 10;
    System.out.println(i);//15
}

扩展的赋值运算符

扩展类运算符不改变运算结果的数据类型,但是使用的时候可能会损失精度。


/*
    +=,-=,*=,/=,%=
 */
public static void main(String[] args){
    int i = 5;
    i += 10;//扩展的运行符,等同于: i = i + 10;其他扩展的运算符类似
    System.out.println(i);//15

    byte a = 10;//10没有超出byte的取值范围,赋值正确
    //a = a + 5;//编译错误,a + 5 为int类型,将int类型赋值给byte,即大容量向小容量赋值,需强制类型转换,所以会编译错误,提示:可能会损失精度
     a += 5;//编译通过,等同于 a = (byte) (a + 5),不等同于 a = a + 5.
    
    byte b = 0;
    b += 128;//编译通过
    System.out.println(b);//-128 运行结果损失精度

}

字符串连接运算符

“+”运算法在Java中有两个作用,一是加法运算,求和;二是字符串的连接符。当“+”两边的数据都是数字时,一定进行的是加法运算;当“+”两边只要有一个数据是字符串,一定会进行字符串的连接运算,且最后的运算结果是一个字符串。

public static void main(String[] args){
    
    System.out.println( 10 + 20 );//30,求和
    System.out.println( 10 + 20 + 30 );//60,求和
    System.out.println( 10 + 20 + "30");//3030,第一个+号求和,第二个+号是字符串连接
    System.out.println( 10 + (20 + "30"));//102030,括号里面的+号是字符串连接,运算结果是字符串2030,然后是10+“2030”,最后得到102030

    int a = 10;
    int b = 20;
    System.out.println( a + "+" + b + "=" + a + b);//10+20=1020
    System.out.println( a + "+" + b + "=" + (a + b));//10+20=30
}

三元运算符

三元运算符也叫三目运算符或条件运算符,语法规则为:布尔表达式 ?表达式1 : 表达式2

其执行原理为:当布尔表达式的结果为true时,选择表达式1为整个表达式的执行结果,当布尔表达式为false时,选择表达式2为整个表达式的执行结果。


public static void main(String[] args){
    boolean sex = false;
    String st = sex ? "男" : "女"
    System.out.println(st);//
    System.out.println(sex ? '男' : '女');//
}

位运算符

位操作是程序设计中对位模式按位或二进制数的一元和二元操作。在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)。

位运算符用来对二进制位进行操作,参与运算的两个数均以补码出现,一般只能操作整数类型的变量或值,Java中提支持的位运算符有7种,除 ~ 以外,其余均为二元运算符。

& 按位与

| 按位或

^ 按位异或

~取反

<<左移

>>右移

>>>无符号右移运算符

第一个操作数

第二个操作数

按位与&

按位或 |

按位异或 ^

0

0

0

0

0

0

1

0

1

1

1

0

0

1

1

1

1

1

1

0


按位与运算

按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。


public static void main(String[] args){
    System.out.println( 5 & 9 );//1
}

运算原理如下图:


按位或运算

按位或运算符“|”是双目运算符。 其功能是参与运算的两数各对应的二进位相或。只要对应的两个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。


public static void main(String[] args){
    System.out.println( 5 | 9 );//13
}

运算原理如下图:


按位异或运算

按位异或运算符“^”是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两个对应的二进位相异时,结果为1。参与运算数仍以补码出现。

public static void main(String[] args){
    System.out.println( 5 ^ 9 );//12
}
运算原理如下图:

求反运算

求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。

public static void main(String[] args){
    System.out.println( ~-5);//4
}

运算原理如下图:

左移运算

左移运算符,是双目运算符。左移n位就是乘以2的n次方。 其功能把左边的运算数的各二进位全部左移若干位,由右边的数指定移动的位数,高位丢弃,低位补0。


public static void main(String[] args){
    System.out.println(-5 << 2);//-20
}

运算原理如下图:


右移运算

右移运算符,是双目运算符。右移n位就是除以2的n次方。其功能是把左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1.

public static void main(String[] args){
    System.out.println(-5 >> 2);//-2
}

运算原理如下图:


无符号右移运算符

无符号右移运算符,把第一个操作数的二进制码右移指定位数,左边空出来的数总是以0补充。无符号右移运算得到的结果总是一个正数。

public static void main(String[] args){
    System.out.println(-5 >>> 2);//1073741822
}

运算原理如下图:



 

posted on 2020-12-21 22:37  AnYeYiYang  阅读(111)  评论(0编辑  收藏  举报

导航