现在的位置: 首页 > 综合 > 正文

移位运算的误区

2018年05月16日 ⁄ 综合 ⁄ 共 415字 ⁄ 字号 评论关闭

面试题一

        long v;
        long a[];
        a = new long[4];
        a[2] = 1;
        a[3] = 1;
        v = a[3] + (a[2] << 8) + (a[0] << 16) + (a[3] << 64);
        System.out.println(v);

面试题二

        int v;
        byte a[];
        a = new byte[4];
        a[2] = 1;
        a[3] = 1;
        v = a[3] + (a[2] << 8) + (a[0] << 16) + (a[3] << 32);
        System.out.print(v);

上面题目大伙看上去好复杂的,都是2的N次方的计算.....

其实不然,最终的结构都是258

在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。

抱歉!评论已关闭.