1、为什么任何数移动32位后还是原来的数(我知道处理器是32位的),比如 1 < <32 这不是应该将低位填充0嘛,为什么做出来时原来的数?2、  移位操作符中,只有数值右端的低5位才有用。 这里所谓的低5位指的是什么? 如果一个 int 数是5那么它的低5位就是0 0101 (这就是低5位)??

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【llm0528】截止到2008-07-10 16:33:49的历史汇总数据(不包括此帖):
    发帖的总数量:49                       发帖的总分数:980                      每贴平均分数:20                       
    回帖的总数量:41                       得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:49                       结贴的总分数:980                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    1、为什么任何数移动32位后还是原来的数(我知道处理器是32位的),比如 1 < <32 这不是应该将低位填充0嘛,为什么做出来时原来的数?2、  移位操作符中,只有数值右端的低5位才有用。 这里所谓的低5位指的是什么? 如果一个数是5那么它的低5位就是0 0101 (这就是低5位)??
      

  3.   

    1.要看左操作数的数据类型长度 如果是32位的比如int(short,byte,char等作int对待,操作前先提升为int) 才是本身 如果是long型 那是64
    2.说的是同一个事 指右操作数(二进制)只有低五位有效 这样就能保证实际移位值保证小于等于31 如果是long 就是低6位至于为何要这样设计 我想是出于算法简便(只要截低五位)或者一些实际操作上的需要(0不太友好 同时也类同一些类型转换的规则)
      

  4.   

    1。
    移位操作符一个非常值得注意的特点是其右操作数是取模运算的,意思是说对于一个int型数据而言,对它移位32位的结果是保持不变而非变成零,即:a>>32的结果是a而不是0,同理,对long型数是对右操作数取64的模, a>>64==a;还有一点需要注意的是移位操作符”>>>”只对int型和long型有效,对byte或者short的操作将导致自动类型转换,而且是带符号的。另外记住:
       a.无论正数、负数,它们的右移、左移、无符号右移   32   位都是其本身,比如   -5 < <32=-5、-5> > 32=-5、-5> > > 32=-5。-------------TerryLhw1983
       b.
       在   JVM   中,> >   操作,后面的数是   int   类型的。如果前一个操作数是   int   类型的话,取右移位数的低   5   位,相当于右移位数与   0x1f   做了   &   运算;
    如果前一个操作数是   long   类型的话,取右移位数的低   6   位,相当于右移位数与   0x3f   做了   &   运算。正如楼主的例子,> >   32,32(100000),可以看到它的低   5   位全是“0”,与   > >   0   的结果一致。---------------火龙果       -------------------------
    java的移位操作符一共有三种,分别是”>>”,”> >>”,”<<”,执行的操作分别是有符号右移,无符号右移,左移,有符号右移的意思是说移入的最高位和原最高符号位相同,无符号右移是移入位始终补零,左移时最低位始终补零,最高位被舍弃。