java运算符

java运算符

比较运算符

== :基本类型比较的是数值,引用类型比较的是地址值

!= : 不等比较

三元运算符

表达式?结果1:结果2 三目运算符

int a=10;
int b=5;
int c= a>b?1:2;//c的结果为1。该运算符的含义为 表达式为真则取结果1,为假则取结果2

逻辑运算符

&:


表达式1&表达式2 表达式1与表达式2都为真则结果为真


&&:短路与


表达式1&&表达式2 含义与上相同,区别为,若表达1为假,则无需判断表达式2,结果直接为假


|:


表达式1|表达式2 表达式1和表达式2中有一个为真则为真


||:短路或


表达式1||表达式2 含义与上相同,区别为,若表达式1为真,则无需判断表达式2,结果直接为真


!:非


!表达式 表达式为真则结果为假,表达式为假则结果为真

赋值运算符

= :赋值

int a=1;

+=,-=,*=,/= : 复合的赋值运算

int a=1;
int a+=1;//相当于 int a=a+1;
int a-=1;//相当于 int a=a-1;
int a*=1;//相当于 int a=a*1;
int a/=1;//相当于 int a=a/1;

注意:

byte a=1;
a=a+1 与 a+=1;是有区别的
/*
a=a+1 的写法会报错,因为a+1为int类型,a为byte类型,需要强转一下  a=(byte)(a+1)
a+=1; 的写法不会报错,这里会默认强制转换
*/    

位移运算符

左移运算符(<<)

概念:按照数字的补码运算,左移两位,低位补0,包括符号位

    public static void main(String[] args) {
        int a=8;
        int b=a<<2;
        //8的补码为:  00000000 00000000 00000000 00001000
        //位移的结果为:00000000 00000000 00000000 00100000
        //换成原码为:  00000000 00000000 00000000 00100000
        //结果为:     32
        System.out.println(b);
        int c=-9;
        int d=c<<28;
        //-9的补码为:  11111111 11111111 11111111 11110111
        //位移的结果为: 01110000 00000000 00000000 00000000
        //换成原码为:  01110000 00000000 00000000 00000000
        //结果为:1879048192     
        System.out.println(d);
    }
    /*
    结果为:
    32
    1879048192
    */

右移运算符(>>)

概念:按照数字的补码运算,丢弃右边位置,左边符号位不变,其余位置补符号位的值

    public static void main(String[] args) {
        int a=8;
        int b=a>>2;
        //8的补码为:  00000000 00000000 00000000 00001000
        //位移的结果为:00000000 00000000 00000000 00000010
        //换成原码为:  00000000 00000000 00000000 00000010
        //结果为:     2
        System.out.println(b);
        int c=-9;
        int d=c>>2;
        //-9的补码为:  11111111 11111111 11111111 11110111
        //位移的结果为: 11111111 11111111 11111111 11111101
        //换成原码为:  10000000 00000000 00000000 00000011
        //结果为:-3     
        System.out.println(d);
    }
    /*
    结果为:
    2
    -3
    */

无符号右移运算符(>>>)

概念:按照数字的补码运算,丢弃右边符号位置,左边包括符号位都补0

    public static void main(String[] args) {
        int a=8;
        int b=a>>>2;
        //8的补码为:  00000000 00000000 00000000 00001000
        //位移的结果为:00000000 00000000 00000000 00000010
        //换成原码为:  00000000 00000000 00000000 00000010
        //结果为:     2
        System.out.println(b);
        int c=-9;
        int d=c>>>2;
        //-9的补码为:  11111111 11111111 11111111 11110111
        //位移的结果为: 00111111 11111111 11111111 11111101
        //换成原码为:  00111111 11111111 11111111 11111101
        //结果为:1073741821     
        System.out.println(d);
    }
    /*
    结果为:
    2
    1073741821
    */

算术运算符

+,-,*

%: 取余

int a=100%3 //结果为1

/:取整

int a=11/2;  //结果为5

++:自增

int a=1;
int c=++a;//c的结果为2,自增常用于循环中

--:自减

int a=2;
int b=--a; //c的结果为1,自减也常用于循环中

&:按位与

概念:两个数字的补码一 一相对,同为0则为0,0和1则为0,同为1则为1

int a=9;
int b=-9;
int c=4;
int d=8;
int e=a&c;
//结果为0步骤如下
//a为9 其补码为     00000000 00000000 00000000 00001001
//c为4 其补码为     00000000 00000000 00000000 00000100
//按上述计算结果为   00000000 00000000 00000000 00000000
int e=a&d;
//结果为8步骤如下
//a为9 其补码为     00000000 00000000 00000000 00001001
//d为8 其补码为     00000000 00000000 00000000 00001000
//按上述计算结果为   00000000 00000000 00000000 00001000
int f=b&d;
//结果为0步骤如下
//b为-9 其补码为    11111111 11111111 11111111 11110111
//d为8 其补码为     00000000 00000000 00000000 00001000
//按上述计算结果为   00000000 00000000 00000000 00000000
//计算的结果为补码,需要转换为原码再计算值,因为是正数补码与原码相同

|: 按位或

概念:两个数字的补码一 一相对,同为0则为0,0和1则为1,同为1则为1

int a=9;
int b=-9;
int c=4;
int d=8;
int e=a|c;
//结果为13步骤如下
//a为9 其补码为     00000000 00000000 00000000 00001001
//c为4 其补码为     00000000 00000000 00000000 00000100
//按上述计算结果为   00000000 00000000 00000000 00001101
int e=a|d;
//结果为9步骤如下
//a为9 其补码为     00000000 00000000 00000000 00001001
//d为8 其补码为     00000000 00000000 00000000 00001000
//按上述计算结果为   00000000 00000000 00000000 00001001
int f=b|d;
//结果为-1步骤如下
//b为-9 其补码为    11111111 11111111 11111111 11110111
//d为8 其补码为     00000000 00000000 00000000 00001000
//按上述计算结果为   11111111 11111111 11111111 11111111
//该负数对应的原码为 10000000 00000000 00000000 00000001 所以结果为-1    

^ : 异或

概念:两个数字的补码一 一相对,同为0则为0,0和1则为1,同为1则为0,注意与或的区别

int a=9;
int b=-9;
int c=4;
int d=8;
int e=a^c;
//结果为13步骤如下
//a为9 其补码为     00000000 00000000 00000000 00001001
//c为4 其补码为     00000000 00000000 00000000 00000100
//按上述计算结果为   00000000 00000000 00000000 00001101
int e=a^d;
//结果为1步骤如下
//a为9 其补码为     00000000 00000000 00000000 00001001
//d为8 其补码为     00000000 00000000 00000000 00001000
//按上述计算结果为   00000000 00000000 00000000 00000001
int f=b^d;
//结果为-1步骤如下
//b为-9 其补码为    11111111 11111111 11111111 11110111
//d为8 其补码为     00000000 00000000 00000000 00001000
//按上述计算结果为   11111111 11111111 11111111 11111111
//该负数对应的原码为 10000000 00000000 00000000 00000001 所以结果为-1    

~ : 取反

概念:两个数字的补码一 一相对,按位取反,0则取为1,1则取为0

int a=~9;

//结果为13步骤如下
//a为9 其补码为     00000000 00000000 00000000 00001001
//按上述计算结果为   11111111 11111111 11111111 11110110
//该负数对应的原码为 10000000 00000000 00000000 00001010  所以结果为-10

posted @ 2023-02-14 20:37  杨远  阅读(15)  评论(0编辑  收藏  举报