Date8.29

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LoveRong521/article/details/82317079

Date:8.29

运算符:

字符串拼接符号:+,该符号的左右任一方有字符串,则这个符号就是拼接字符的效果;
    boolean b=true;
    int a=10;
    float f=1.0f;
    System.out.println("b="+b); 结果:--b=true
    System.out.println("x="+x);
    System.out.println("f="+f);

算术运算符:+加、 -减 、 *乘、 /除 、 %取余 、 ++自加 、 --自减

    加号:注意,防止+符号左右出现字符串,否则该符号就是拼接而非加法运算;
        class YSF{
            public static void main(String[] args){
                int x=15;
                System.out.println("x+1="+(x+1));
            }
        }

    减法:注意,优先进行减法运算,再拼接结果;
        class YSF{
            public static void main(String[] args){
                int x=15;
                System.out.println("x+1="+(x-1));
            }
        }

    乘号:*
        注:在数学中 4a,但是在计算机中必须写出乘号 4*a

    除号:/
        注:不允许出现除数为0,但计算机中会报异常-除数为零异常(Error/Exception)
        例:
            class YSF{
                public static void main(String[] args){
                    int x=15;
                    System.out.println(x/0);
                }
            }
        以下是执行完上面代码后的异常信息:
            Exception in thread "main" java.lang.ArithmeticException: / by zero
            at YSF.main(Demo1.java:15)  在Demo1.java文件中,第15行有错;

    %:取余,取余数
        例:判断奇偶性;取出一个随机范围;

        注:取余时,结果的正负取决于被除数的正负号;
        例:
            int x=8;
            System.out.println(x/3);//2
            System.out.println(x%3);//2
            System.out.println(x/(-3));//-2
            System.out.println(x%(-3));//2
            System.out.println((-x)/3);//-2
            System.out.println((-x)%3);-2
            System.out.println((-x)/(-3));//2
            System.out.println((-x)%(-3));//-2

    ++:自加,每次自加1
        例:int x=1; x++;  x是多少?2
            int x; x++;  x是多少?错误,变量没有初始化;

        x++和++x的区别;

        int x=1;
        //单独使用++x和x++,没有区别,都是+1操作;
        //x++;
        //++x;

        //当x++和++x使用在别的语句中的时,x++和++x的区别:
        //x++:先使用原来的值,再执行加1
        //++x:先给原值加1,再使用;
        //System.out.println(x++);//1
        //System.out.println(++x);//2

        例:int x=10;
        计算:(x++)+(++x)+(++x)+(x++)+(x++),问最终和是多少?x的值是多少?
            括   10    12    13    13    14   和62
            加1  11    12    13    14    15   x=15

    --:累减,每次减1;

        例:int x=1; x--;  x是多少?0
            int x; x--;  报错,变量没有初始化;

        计算:x=10
        (x++)+(++x)+(++x)+(x++)+(x++)+(--x)+(x--)+(x++),最终和是多少?x的值是多少?
        10+12+13+13+14+14+14+13=103
        x=14

赋值运算符:

    =:赋值符号,将右边的变量或常量值赋值给左边的变量;
    例:int x=1;

    +=、-=、*=、/=、%=:左右两边的值进行运算,再将结果赋值给左边变量;
    例:赋值
        int x=1;
        x+=1;//相当于 x=x+1,也等价于x++或++x

        左右两边的变量相运算
        int x=1,y=2;
        x+=y;//相当于x=x+y

        右边的整体表达式与左边变量相运算
        int x=3,y=2;
        //x+=y;
        x*=y+3;
        System.out.println("x="+x+"\ty="+y);//x=15  y=2

关系运算符:> 大于、 <小于 、 >=大于或者等于 、 <=小于或者等于 、 ==等于 、 !=不等于

    注:关系运算符的结果都布尔类型(true或false)

逻辑运算符:&&与(且) 、 ||或、!非 、 &与(位) 、 |或(位) 、 ^异或(位) 

    例:int x=10,y=20;
        x>y 当x大于y时
        !(x>y) 当x小于或等于y时,等价于 x<=y

    与(位):对应两个数的二进制位值都为1时,结果的该位也是1;
    例:3&4
        0011
        0100
      ———————
        0000

    或(位):对应两个数的二进制位值只要任一方为1时,结果的该位也是1;
    例:3|4
        0011
        0100
      ———————
        0111

    异或(位):对应两个数的二进制位值只要不同,结果的该位是1;
    例:3^5
        0011
        0101
      ———————
        0110

位运算符: ~ 、 >> 、 << 、 >>>

    ~取反
        规律:-(数+1)
            正数:-(原正数+1)
            负数:-原数-1 

        注:正数的原码、反码、补码都一样;计算机中存储数据是按补码存放;
        原码:二进制表示
        反码:除符号位,将原码全部取反(0变1,1变0)
        补码:在反码基础上再加1

        数据类型    byte/short/int/long
        字节数     1   2       4   8
        位           8   16      32  64

        例:96
        二进制:0110 0000
        原码、反码、补码:0110 0000

            0110 0000 在计算机中存储
            ~(0110 0000)全部取反
            1001 1111  --结果(补码)
            补-->反-->原
            补:1001 1111
            反:1001 1110
            原:1110 0001   -97

        例: 119(-120)    100(-101)    58(-59)

            100=64+32+4
            0110 0100
            1001 1011
            补-->原
            1110 0101  -101

        练习:  -49   -29   -119

            -119
            119-->0111 0111
            -119-->1111 0111原
            补:1000 1001
            ~:0111 0110原、补
            结果:0111 0110   118

    <<:左移位,相当于乘法;左移位一次乘以2;

    >>:右移位,相当于除法,右移位一次除以2;保留符号位,负数的高位补1,正数的高位补0;

    >>>:右移位,相当于除法,带着符号位向右移动,高位补0;
        例:8>>>1结果:4 ;-8>>>1 结果:2147483644

        -8>>1   -8>>>1
        //原1000 1000
        //补1111 1000
        byte x=-8;
        //原1000 0000  0000 0000  0000 0000  0000 1000
        //补1111 1111  1111 1111  1111 1111  1111 1000
        //移位01111 1111  1111 1111  1111 1111  1111 100
        //2147483644
        int res=x>>>1;//0
        System.out.println(res);
        x=-8;
        //补:1111 1000
        //移位:1111 1100
        //反码:1111 1011
        //原码:1000 0100  -4      
        res=x>>1;//0
        System.out.println(res);

    总结:
        原码、反码、补码
        正数的原、反、补码相同;
        负数:反码是对原码除了符号位按位取反,补码是对反码加1;
        计算机中存储补码;

        ~83
        原:0101 0011
        取反:1010 1100
        1010 1011
        1101 0100  -84

        ~(-93)
        原:1101 1101
        补:1010 0011
        取反:0101 1100    92

        >>和>>>区别?
            >>符号位保留不变;
            >>>符号位一起移位;

    注:  
        两个byte、两个short相运算、byte和short运算,结果都是int;

        //byte b1=1;
        //byte b2=2;
        //byte res=(byte)(b1+b2);//两个byte运算的结果是int类型
        //short s1=1;
        //short s2=2;
        //short res=(short)(s1+s2);//两个short运算的结果是int类型

        char和int相运算,结果将char自动转为ASCII码参与运算;
        例:char c='a';
        int res=10+c;//c里存储的字符的ASCII码
        System.out.println(res);

三目运算符:? :
    语法:表达式?结果1:结果2
    解释:如果表达式结果为true,则执行结果1,否则执行结果2;

    例:
        public static void main(String[] args){
            int x=10;
            int y=2;
            //String res=x>y?"true":"false"; //结果:true
            boolean bb=x<y?true:false;//结果: true
            System.out.println(bb);
        }

猜你喜欢

转载自blog.csdn.net/LoveRong521/article/details/82317079