2 qq 31822385 qq_31822385 于 2017.09.14 22:49 提问

中兴面试题,很诡异的。。。。
public static void main(String[] args) {
    final long  a= 24*60*60*1000*1000;
    final long b = 24*60*60*1000;
    System.out.println(a/b);
    }
    这个结果是多少?1000是不对的,

3个回答

caozhy
caozhy   Ds   Rxr 2017.09.15 08:35

final long a= (long)24*60*60*1000*1000;
final long b = (long)24*60*60*1000;
System.out.println(a/b);
这样写就是1000,你那样溢出了

q690080900
q690080900   2017.09.15 09:08

java中 数字类型默认是 int 的 24 * 60 * 60 * 1000 * 1000 得到的数仍然是哥int类型的数
但是这个值已经远远大于int的取值了 所以就会在int范围内重新计算 导致 结果并不是真正的值

qq_33727653
qq_33727653   2017.09.15 11:04

主要是a越界 24*60*60*1000*1000是int 越的界的数据是2^32 的倍数 ,也就是24*60*60*1000*1000的long值减去越界值等于a值。

也就是24*60*60*1000*1000的long值减去2^32 ,再减2^32 ,再减2^32 。。。。。一直减到不再越界,剩下的值就是a的值了!!!

这里是24*60*60*1000*1000的long值减去2^32 *20 之后是a的值【-_-||-_-||这个方式好笨的-_-||-_-||,但好歹自己能算出来。。。】

Csdn user default icon
上传中...
上传图片
插入图片