JAVA操作符位移详解

package util;

public class BitOperator {

    public static void main(String[] args) {
        System.out.println("\n按位左移");
        output("123", 123);
        output("123 << 32", 123 << 32);
        System.out.println("\n按位有符号右移");
        output("123", 123);
        output("123 >> 2", 123 >> 2);
        System.out.println("\n按位有符号右移,右移时高位补充符号位");
        output("-123", -123);
        output("-123 >> 2", -123 >> 2);

        System.out.println("\n按位无符号右移");
        output("123", 123);
        output("123 >>> 1", 123 >>> 1);

        System.out.println("\n按位无符号右移,右移时高位补 0");
        output("-123", -123);
        output("-123 >>> 2", -123 >>> 2);
    }

    private static void output(String prompt, int result) {
        System.out.printf("%10s = %-10d  %s%n", prompt, result, toBit(result));
    }

    public static String toBit(int num) {
        char[] chs = new char[39];
        for (int i = 0, k = 0; i < Integer.SIZE; i++) {
            chs[k++] = (char)('0'+ ((num >>> Integer.SIZE - i - 1) & 1));
            if ((i & 3) == 3 && k < chs.length) {
                chs[k++] = ' ';
            }
        }
        return new String(chs);
    }
}


/*
  按位左移
 
       123 = 123         0000 0000 0000 0000 0000 0000 0111 1011
  123 << 2 = 492         0000 0000 0000 0000 0000 0001 1110 1100

按位有符号右移
       123 = 123         0000 0000 0000 0000 0000 0000 0111 1011
  123 >> 2 = 30          0000 0000 0000 0000 0000 0000 0001 1110

按位有符号右移,右移时高位补充符号位
      -123 = -123        1111 1111 1111 1111 1111 1111 1000 0101
 -123 >> 2 = -31         1111 1111 1111 1111 1111 1111 1110 0001

按位无符号右移
       123 = 123         0000 0000 0000 0000 0000 0000 0111 1011
 123 >>> 2 = 30          0000 0000 0000 0000 0000 0000 0001 1110

按位无符号右移,右移时高位补 0
      -123 = -123        1111 1111 1111 1111 1111 1111 1000 0101
-123 >>> 2 = 1073741793  0011 1111 1111 1111 1111 1111 1110 0001
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑石课堂

请给我打钱!!!谢谢,不客气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值