1.除零的情况

整数除零:

public static void main(String[] args) {
        System.out.println(3/0);
    }
}

java求解零点 java除零_java求解零点

当整数除零时的结果如图所示,除零错误。

浮点除零:

`public class HELLO {
    public static void main(String[] args) {
        System.out.println(3/0);
    }
}

这时结果是Infinity
在除零时,如果分子是浮点型,则分母是零也是正确的,结果为无穷大Infinity

2.求余运算

注意:求余运算的结果不一定总是整数,它的计算结果,是使用第一个运算数除以第二个运算数,得到一个整除的结果后剩下的值,也就是余数。
如果求余运算的两个操作数中有1个或者2个是浮点数,则允许第二个操作数是0或0.0,只是求余结果是非数:NaN。0或0.0对零以外的任何数求余都将得到0或0.0。
例如:

public class test{
    public static void main(String args[]){
        System.out.println(14.4f % 0);
        System.out.println(14.4f % 2);


    }
}

java求解零点 java除零_操作数_02


程序运行结果如图示。

注意:当用0对一个整数进行求余运算时,会发生整数的除零错误,详情见上文。

3.位运算符

这里主要介绍移位运算符,java中移位UN算符有三种:

  • 右移 (算术右移):>>
  • 右移并0填充(逻辑右移): >>>
  • 左移 :<<

移位运算符的操作数都必须是整数,否则会编译出错。
\<<:左移运算符把数字的位向左移相应的位数,右边用0填充,相当于乘以 2^(移位量)。
>>:右移运算符,能够把进行移位的操作数二进制码右移指定位数,将左边空出来的位以原来的符号位填充。
>>>:能够把进行移位的操作数的二进制码右移指定位数后,将左边空出来的位总用0补充。

例如:

public class HELLO {
    public static void main(String[] args) {
        int i = 4;
        System.out.println("i << 2   = "+(i << 2));
        System.out.println("i >> 2   = "+(i >> 2));
        System.out.println("i >>> 2  = "+(i >>> 2));
        System.out.println("-i << 2  = "+(-i << 2));
        System.out.println("-i >> 2  = "+(-i >> 2));
        System.out.println("-i >>> 2 = "+(-i >>> 2));

    }
}

java求解零点 java除零_java求解零点_03


程序运行结果如图所示。

其实当进行移位的操作数是正数的时候,这三种移位操作的结果都不会有意外的结果,因为正数在计算机中的二进制补码表示等于其原码表示,但是负数在计算机中的二进制表示是补码表示与其原码表示相差很大,当负数进行 >>> 移位时,会将负数变为正数

再补充一点,当移位量大于数的位数时,实际位移量计算如下:

设数的位数是w,移位量是k,当k >= w时,实际移位量是 k mod w.

例如:

int i = 4;
i = i << 33;

i的结果是8。