byte a=-127; for(int i=0;i<8;i++) { a=(byte)(a>>>1); System.out.println(a);
}
结果是:-64,-32,-16,-8,-4,-2,-1,-1
显然是带符号右移,但>>>按理来说应该是不带符号的右移啊,咋整呀,同志们?
byte a=-127; for(int i=0;i<8;i++) { int ba=a>>>1; a=(byte)ba; System.out.println(ba); }
你要看效果应该这样才能看得到 它的输出是: 2147483584 2147483616 2147483632 2147483640 2147483644 2147483646 2147483647 2147483647 这样就全都是正数了
运算步骤: a=-127 1111 1111 a晋升为int 1111 1111 1111 1111 1111 1111 1000 0001 无符号右移 0111 1111 1111 1111 1111 1111 1100 0000 强制转为byte 1100 0000 输出 -64
负号来自于向下强制转型。你要多移个百来十位,它就转正老~
像移动等运算符只对int值有效,所以都会先转为int再移 你移完后如果转成byte,那它的高位肯定还是1,当然会出现负数的情况了
To:flyingghost, Java用原码表示数据吗?按理来说应该用补码吧.
|