各位高手,我在一本书上看的关于右移运算符>>对最高位(最左边)的操作是:最高位则移入原来高位的值.并举例如a=11010011, 则 a>>2=11110100.而另一本书上说,最高位应补零,既a>>2=00110100,我认为后者对.请各位于以指正.

解决方案 »

  1.   

    >>是有符号的移位符,它移过来的时候,是把高位的符号位也一起移过来的
    而JAVA特有的>>>是无符号的移位符,它就是只把高位填0的
    一定要区分清楚
      

  2.   

    是否可这样理解,既有符号位的右移,只要最高位是1,则无论右移几位均左补1.如:
    若a=10000011,则 a>>2=11100000.
      

  3.   

    右移有两种:右移运算符>>(有符号)
    用来将一个数的各二进制位全部右移若干位.例如:a = a>>2,使a的各二进制位右移两位,移到右端的低位被舍弃,最高位则移入原来高位的值.
    如:a = 00110111,则a>>2=00001101,b=11010011,则b>>2 = 11110100
    右移一位相当于除2 取商,而且用右移实现除法比除法运算速度要快无符号右移运算符>>>
    用来将一个数的各二进制位无符号右移若干位,与运算符>>相同,移出的低位被舍弃,但不同的是最高位补0,如a = 00110111,则a>>>2 = 00001101,b=11010011,则b>>>2 = 00110100所以,,你上面第一种是右移,第二种是无符号右移
      

  4.   

    oscar_java(oscar) ( )的解释很好!支持!!不过感觉是从书上抄的!我好面熟!
      

  5.   

    oscar_java(oscar) 讲得非常明白