Java中的运算规则

 1 package test;
 2 public class test {
 3     public static void main(String[] args) {
 4         //1.位运算优先级低于逻辑运算,
 5         //2.自增优先级最高,加法其次,最后是按位移
 6         //3.a++ 运算符在操作数之后,称为“后增量”。a变量自增,返回自增之前的值;
 7         //  ++a 运算符在操作数之前,称为“前增量”。a变量自增,返回自增之后的值。
 8         int a = 2;
 9         int b = (a++) << (++a) + (++a);
10         int c = 2 << ((2+1) +1) + (((2+1) +1)+1);
11         System.out.println(b);
12         System.out.println(c);
13         int f = 2;
14         int e = f++ + --f << ++f + f-- << f << ++f + --f;
15         System.out.println(e);
16         int g = 2 + 2 << 3 + 3 << 2 << 3 + 2; //4<<6<<2<<5
17         System.out.println(g);
18         System.out.println(4<<6<<2<<5);
19 
20     }
21 }
 
Java中的<< 和 >>解释如下:

<<表示左移移,不分正负数,低位补0; 

注:以下数据类型默认为byte-8位

左移时不管正负,低位补0

正数:r = 20 << 2

  20的二进制补码:0001 0100

  向左移动两位后:0101 0000

         结果:r = 80

负数:r = -20 << 2

  -20 的二进制原码 :1001 0100

  -20 的二进制反码 1110 1011

  -20 的二进制补码 :1110 1100

  左移两位后的补码:1011 0000

        反码:1010 1111

        原码:1101 0000

        结果:r = -80

>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;

注:以下数据类型默认为byte-8位

正数:r = 20 >> 2

  20的二进制补码:0001 0100

  向右移动两位后:0000 0101

       结果:r = 5

负数:r = -20 >> 2

  -20 的二进制原码 :1001 0100

  -20 的二进制反码 :1110 1011

  -20 的二进制补码 :1110 1100 

  右移两位后的补码:1111 1011 

        反码:1111 1010

        原码:1000 0101

        结果:r = -5

详细分析见文章: Java中的<< 和 >> 和 >>> 详细分析

posted @ 2020-05-07 15:26  xhc0714  阅读(494)  评论(0)    收藏  举报