为了账号安全,请及时绑定邮箱和手机立即绑定

Java中逻辑左移运算的困惑?

Java中逻辑左移运算的困惑?

饮歌长啸 2019-03-14 18:15:28
菜鸟学习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 回答

  • 2 回答
  • 0 关注
  • 581 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号