Java中逻辑左移运算的困惑?
天蓬老师
天蓬老师 2017-04-18 09:58:06
[Java讨论组]

菜鸟学习Java基础中的逻辑左移,遇到了些许疑惑,求解答,废话不多说,直接上代码:

public class Client {
    public static void main(String[] args) {
        int x = 3; //00000000,00000000,00000000,00000011
        int y = -3;//10000000,00000000,00000000,00000011 原码
                   //11111111,11111111,11111111,11111100 反码
                   //11111111,11111111,11111111,11111101 补码
        int x2 = x << 2;
        int y2 = y << 2;

        int x15 = x << 15;
        int y15 = y << 15;

        int x30 = x << 30;
        int y30 = y << 30;

        int x31 = x << 31;
        int y31 = y << 31;

        int x32 = x << 32;
        int y32 = y << 32;

        int x34 = x << 34;
        int y34 = y << 34;

        System.out.println("x2=" + x2);//12(12=3*(2^2))
        System.out.println("y2=" + y2);//-12
        System.out.println("x15=" + x15);//98304(98304=3*(2^15))
        System.out.println("y15=" + y15);//-98304
        System.out.println("x30=" + x30);//-1073741824
        System.out.println("y30=" + y30);//1073741824
        System.out.println("x31=" + x31);//-2147483648
        System.out.println("y31=" + y31);//-2147483648
        System.out.println("x32=" + x32);//3
        System.out.println("y32=" + y32);//-3
        System.out.println("x34=" + x34);//12
        System.out.println("y34=" + y34);//-12
    }
}

百度谷歌的结果都说的很乱,有些人是照搬教科书上的原话,有些人是转载别人的,乱七八槽(PS:也可能是我不会用搜索引擎)。从搜索结果来看,基本上说的都是:逻辑左移运算,负数以补码进行运算,正数以原码进行运算,右边补零(PS:依稀记得,教科书上好像也是这么说的)。但是从程序运行结果来看,这么说肯定是不正确的,所以求一个完善的逻辑左移运算的规则?(PS:我也曾想去找Java官方的文档解释,但是只找到了一份Java API,其中都是讲解JDK中的类的,貌似没有说逻辑左移运算这些东东的。。。如果有人找到麻烦答案中说一下,菜鸟致以最高的敬意)

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
怪我咯

http://blog.csdn.net/bingjie1...

首先,左移使用补码,右侧补0。
其次,左移位数不能超过被移动变量的位数,否则只去对应位数的部分,int取右5位,即小于32的部分。

另外,这个博主说的是从源码转补码的过程,而不是反码转补码的过程,人家当成取绝对值哪里不对了?

黄舟

题主说清楚按你的理解对哪个结果有疑问啊... 不然没法知道你哪里理解出问题了
这东西要看语言规范,这里有 https://docs.oracle.com/javas...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号