Java运算符

Java运算符

计算机原码、反码、补码定义

  • 原码表示法规定:用符号位和数值表示带符号数,正数的符号位用“0”表示,负数的符号位用“1”表示,数值部分用二进制形式表示。

  • 反码表示法规定:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。

  • 补码表示法规定:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1。

基本运算符

  • 算术运算符:+,-,*,/,%,++,–

二元运算符

  int a = 10;
    int b = 20;
    int c = 10;
    int d = 10;
    int e = 21;
    System.out.println(a+b);
    System.out.println(a-b);
    System.out.println(a*b);
    System.out.println(a/b);//int类型相除还是int,因此舍去小数点后数值,为输出正确数值需要将其中一个转换为浮点数。
    System.out.println((double) a/b);
    System.out.println(e%a);//取余,也称模运算```
    
    long a = 324234523L;
    int b = 123;
    short c = 10;
    byte d = 7;
    double e = 10.2;
    System.out.println(a+b+c+d);
    System.out.println(b+c+d);
    System.out.println(c+d);
    System.out.println(a+b+c+d+e);

多个类型进行运算,有一个数据类型为long,结果也为long,如果没有,那结果均为int,无论int是否参与。也即是混合数据类型参与计算,自动升格为包含的类型中的最高类型,若不足int,则补足至int。

一元运算符++和–要注意运算顺序,放在变量前先自增,再赋值,放在变量后,先赋值,再自增。

 //++   --  自增  自减  属于一元运算符,自己便可以参与运算
        int q = 3;
        int w = q++;//执行完这行代码后,先给w赋值,然后q自增。
        int r = ++q;//执行完这行代码前,q先自增,再给r赋值。
        System.out.println(q);
        System.out.println(r);
        System.out.println(w);
        //所以结果为q=5,r=5,w=3。
  • 赋值运算符:=
  • 关系运算符:<,>,<=,>=,==,!=,instanceof
//关系运算符返回的结果,true或者false
    int a = 10;
    int b = 20;
    System.out.println(a>b);
    System.out.println(a<b);
    System.out.println(a==b);
    System.out.println(a!=b);
  • 幂运算在Java中无法使用,比如23,但是可以使用数学工具,如
double pow = Math.pow(2, 3);
    System.out.println(pow);
  • ctrl + D ,复制当前行到下一行。

  • 逻辑运算符:,&&,||,!。

        boolean a = true;
        boolean b = false;
        System.out.println("a && b:"+(a&&b));//逻辑与运算:两个变量都为真结果为真
        System.out.println("a || b:"+(a||b));//逻辑或运算:两个变量有一个真,结果为真。
        System.out.println("!(a && b):"+(!(a&&b)));//逻辑非运算:结果为真变假。

//短路运算,与运算中开头变量为假,后边便不需要执行,或运算中开头为真,那后面也不需要执行,如b&&a,a||b。

int c = 5;
    boolean d = (c<4)&&(c++<4);
    System.out.println( c);
    System.out.println(d);//结果c =5,后面的没有执行。
  • 位运算符:&,|,^,~,>>,<<,>>>
/*
        A = 0011 1100
        B = 0000 1101

        A&B =0000 1100    对位比较,两个为1才输出1,否则为0。
        A|B =0011 1101    有一个1就输出1。
        A^B =0011 0001    相同为0,不同为1.
        ~B = 1111 0010   取反。

        2*8最快运算方法,使用位运算。
        << 左移  对象的2进制数后面加位移数字的0  如 1100 1011<<2 == 1100 1011 00
        >> 右移   对象的2进制数右边去掉位移数字的位。1100 1011>>2 == 1100 10
         */
        System.out.println(2<<3);//意为2的2进制向左移3位,即0000 0010变为0001 0000
  • 2进制最左边的数字代表正负,0为正,1为负。

  • 正数>>,等于其2进制数去掉位移数字的位数;负数>>,等于去掉位移位数的同时在其前面加相应位数的1。

  • 正数<<,相当于直接在其2进制数最后加位移数字的0;负数<<也是如此。

  • 对于正数来说,>>>同>>一样为右移,对于负数而言,意味着直接去掉位数的同时,前面不补1,也即是默认变为了0,变成了正数。

int a = 0b11000110;
    int b= 0b00110001;
    System.out.println(b);
    System.out.println(a);
    System.out.println(a>>3);
    System.out.println(Integer.toBinaryString(a>>3));
    System.out.println(Integer.toBinaryString(-a));
    int c = 0b11111111111111111111111100111010;
    System.out.println(c);
    System.out.println(c>>2);
    System.out.println(Integer.toBinaryString(c>>2));
    System.out.println(c<<2);
    System.out.println(Integer.toBinaryString(c<<2));
    System.out.println(c>>>2);
    System.out.println(Integer.toBinaryString(c>>>2));
    System.out.println(Integer.toBinaryString(1073741774));
  • 条件运算符:?,:

    三元运算符

  public static void main(String[] args) {
        // x? y : z
        //如果x==true,则结果为y,否则为z
        int score = 80;
        String type = score < 60 ? "不及格":"及格";
       System.out.println(type);
  • 拓展赋值运算符:+=,-=,*=,/=
        int a= 10;
        int b = 20;
        int c = 30;
        int d = 40;
        a+=b;//等价于a=a+b
        System.out.println(a);
        a-=b;//a=a-b
        System.out.println(a);
        System.out.println("==========================================");
        //字符串连接符  +
        System.out.println(a+b);
        System.out.println(""+a+b);//操作对象中最前面存在String类型等字符串,会自动转换为字符串运算。
        // 此处输出1020
        System.out.println(a+b+"");//如果操作对象中的字符串在末尾,那么仍旧进行计算。
        //此处输出 30
        System.out.println(a+""+b);//如果操作对象中的字符串在中间,那么会转换为字符串进行运算。
        //此处输出 1020
        System.out.println(a+b+""+c+d);//如果操作对象不止两个,字符串前方有数字运算,那么字符串前继续运算,后面则转化为字符串运算。
        //此处输出303040。

在使用字符串连接符进行运算时,如果操作对象中存在字符串,字符串在首位时,后面全部转化为字符串运算,而字符串前面如果不止一个对象,那么先进行数学运算再转化为字符串参与运算。如 a=10,b=20,c=30,d=40,
a+b+“”+c+d=303040。

运算符优先级

结论:多加括号。

全部逻辑运算符实例及输出结果

package operator;
public class Test7 {
    //三元运算符
    public static void main(String[] args) {
        // x? y : z
        //如果x==true,则结果为y,否则为z
       int score = 80;
        String type = score < 60 ? "不及格":"及格";
        System.out.println(type);
        int a= 10;
        int b= 20;
        int c = 22;
        int d = a++;
        System.out.println(a);
        System.out.println(d);
        int e = ++a;
        System.out.println(a);
        System.out.println(e);
        System.out.println("==============================================");
        int f = a--;
        System.out.println(a);
        System.out.println(f);
        int g = --a;
        System.out.println(a);
        System.out.println(g);
        System.out.println("===========================================================");
        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println(a/(double)b);
        System.out.println(a%b);
        System.out.println(b%a);
        System.out.println(c%a);
        System.out.println("=============================================================");
        System.out.println(a>b);
        System.out.println(a<b);
        System.out.println(a>=b);
        System.out.println(a<=b);
        System.out.println(a==b);
        System.out.println(a!=b);
        System.out.println("=============================================================");
        boolean A = true;
        boolean B = false;
        System.out.println("A&&B:"+(A&&B));
        System.out.println("A||B:"+(A||B));
        System.out.println("!(A&&B):"+(!(A&&B)));
        System.out.println("===============================================================");
        int C = 0b01001100;
        int D = 0b10110100;
        int E = 0b11111111111111111111111100111010;
        System.out.println(C);
        System.out.println(D);
        System.out.println(E);
        System.out.println(C&D);
        System.out.println(C|D);
        System.out.println(C^D);
        System.out.println(~C);
        System.out.println(C<<2);
        System.out.println(C>>2);
        System.out.println(C>>>2);
        System.out.println(E>>2);
        System.out.println(E<<2);
        System.out.println(E>>>2);
        System.out.println("==========================================================");
        int F = 15;
        String fenshu = F>20? "yes":"no";
        System.out.println(fenshu);
        a+=b;
        System.out.println(a);
        a-=b;
        System.out.println(a);
        a*=b;
        System.out.println(a);
        a/=b;
        System.out.println(a);
    }
}

输出结果:

及格
11
10
12
12
==============================================
11
12
10
10
===========================================================
30
-10
200
0.5
10
0
2
=============================================================
false
true
false
true
false
true
=============================================================
A&&B:false
A||B:true
!(A&&B):true
===============================================================
76
180
-198
4
252
248
-77
304
19
19
-50
-792
1073741774
==========================================================
no
30
10
200
10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值