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中的<< 和 >> 和 >>> 详细分析

浙公网安备 33010602011771号