返回顶部
扩大
缩小

Yeap

整数运算

Java的整数运算规则遵循四则运算,可以使用任意嵌套的小括号。

溢出

 在运算中需要注意的是,整数由于存在范围限制,如果计算结果超出了范围,就会产生溢出,而溢出不会报错,却会得到一个别的结果

例如 一个int类型的数值,超过了它的取值范围,(-2147483648到+2147483647)就会产生溢出,得到的值会是一个负数。

简写的运算符:  +=,-= ,*= ,/=

n += 100; 相当于 n=n+100;
n -=  100; 相当于 n= n-100;

  自增、自减

Java还提供了 ++  运算和 --运算,他们可以对一个整数进行加1和减1的操作;

注意++写在前面和后面计算结果是不同的,

  ++n表示先加1再引用n,

  n++表示先引用n再加1。

移位运算

在计算机中,整数总是以二进制的形式表示。

int n = 7;       // 00000000 00000000 00000000 00000111 = 7
int a = n >> 1;  // 00000000 00000000 00000000 00000011 = 3
int b = n >> 2;  // 00000000 00000000 00000000 00000001 = 1
int c = n >> 3;  // 00000000 00000000 00000000 00000000 = 0

对一个负数进行右移,最高位的 1  不动。结果仍然是一个负数:

int n = -536870912;
int a = n >> 1;  // 11110000 00000000 00000000 00000000 = -268435456
int b = n >> 2;  // 11111000 00000000 00000000 00000000 = -134217728
int c = n >> 28; // 11111111 11111111 11111111 11111110 = -2
int d = n >> 29; // 11111111 11111111 11111111 11111111 = -1

还有一种就是 无符号的右移运算使用 >>> 他的特点是不管符号位,右移后最高位总是补 0 ,因此对一个负数进行 >>> 运算,他会变成一个正数,原因是最高位的1 变成了 0.

int n = -536870912;
int a = n >>> 1;  // 01110000 00000000 00000000 00000000 = 1879048192
int b = n >>> 2;  // 00111000 00000000 00000000 00000000 = 939524096
int c = n >>> 29; // 00000000 00000000 00000000 00000111 = 7
int d = n >>> 31; // 00000000 00000000 00000000 00000001 = 1

仔细观察可发现,左移实际上就是不断地×2,右移实际上就是不断地÷2。

位运算

& 与运算的规则是,两个数必须同时为1,结果才为1

n = 0 & 0; // 0
n = 0 & 1; // 0
n = 1 & 0; // 0
n = 1 & 1; // 1

| 或运算的规则是,只要任意一个为1,结果就为1;

n = 0 | 0; // 0
n = 0 | 1; // 1
n = 1 | 0; // 1
n = 1 | 1; // 1

~ 非运算的规则是, 0和1互换:

n = ~0; // 1
n = ~1; // 0

^ 异或运算的规则是,如果两个不同的数,结果为1,否则为0;

n = 0 ^ 0; // 0
n = 0 ^ 1; // 1
n = 1 ^ 0; // 1
n = 1 ^ 1; // 0

运算优先级

Java的计算表达式中,运算优先级从高到底依次是:

  • ()
  • ! ~ ++ --
  • * / %
  • + -
  • << >> >>>
  • &
  • |
  • += -= *= /=

posted on 2020-11-10 19:54  YP泡泡  阅读(450)  评论(0)    收藏  举报

导航