“对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,最后得到的结果也是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数”1。在byte进行移位的时候,为何要先变成int,这样会造成byte,int不匹配,移位后还要做cast
2. 为何只有5个低位才会用到,这样可以防止一个int数里移动不切实际的位数?难道int数只能移动5位?对于long,只用到低6位,为什么?请各位举例说明

解决方案 »

  1.   

    1.因为JVM的字长是32位,不存在对8位的操作!
    2.后五位指的是移动的位数(0~31),比如 byte b=12  b>>65
      65的后位是 00001 所以b>>65 相当于 b>>1
      对于long型,六位就够了(可以移动0~63)
      

  2.   

    后5位,2的5次方,为32,说明int最多可以移动32位,若data<<33, 和data<<1应该是一样的,同理因为long是64位,所以它只能移动64位, 正好是一个移动位数的后6位, 可以这样理解吗
      

  3.   

    但是 char , byte , short 都有不止 5 bits ? 楼上这个说的啥意思?