Java无符号右移

Java无符号右移

 1 public class test {
 2     public static void main(String[] args) {
 3         byte i = -1;
 4         System.out.println("i=        "+Integer.toBinaryString(i));
 5         i>>>=8;
 6         System.out.println("i >>>= 8: "+Integer.toBinaryString(i));
 7         short j = -1;
 8         System.out.println("j=        "+Integer.toBinaryString(j));
 9         j>>>=8;
10         System.out.println("j >>>= 8: "+Integer.toBinaryString(j));
11         int k = -1;
12         System.out.println("j=        "+Integer.toBinaryString(k));
13         k>>>=8;
14         System.out.println("k >>>= 8: "+Integer.toBinaryString(k));
15 16         System.out.println("          "+Integer.toBinaryString(j>>>8));
17     }
18 }
19 20 /**Output:
21  * i=        11111111111111111111111111111111
22  * i >>>= 8: 11111111111111111111111111111111
23  * j=        11111111111111111111111111111111
24  * j >>>= 8: 11111111111111111111111111111111
25  * j=        11111111111111111111111111111111
26  * k >>>= 8: 111111111111111111111111
27  *           111111111111111111111111
28  * */

 

byte、short、char在做移位运算之前,会被自动转换为int类型,然后再进行运算,然后被截断,赋值给原来的类型。

通过 byte i= -1,i>>>=8 进行说明:

  ①i由byte类型先转换为int类型

    byte类型的i的二进制:1111 1111

    int   类型的i的二进制:1111 1111 1111 1111 1111 1111 1111 1111

  ②进行无符号右移运算

    结果为:0000 0000 1111 1111 1111 1111 1111 1111

  ③再将结果转换为byte类型,会发生截断

    结果为:1111 1111

此时会造成与原来的值相同。

posted @ 2021-05-19 15:30  sumAll  阅读(597)  评论(0编辑  收藏  举报