移位操作符 --《JAVA编程思想》11

本文详细介绍了Java中的左移位、右移位(区分正负)和无符号右移位操作符,以及它们在整数类型(char、byte、short、int、long)中的应用。内容包括操作符的定义、示例代码及其运行结果,同时提醒注意移位操作的位数限制和类型转换可能带来的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天我们来一起了解下 JAVA中的移位操作符。

移位操作符的运算对象是二进制的“位”,只能用来处理整数类型(char、byte、short、int、long)。

操作符名称符号含义
左移位操作符<<将右侧指定位数向左移动,在低位补0
右移位操作符(区分正负)>>将右侧指定位数向右移动,若符号为正,在高位插入0;若符合为负,在高位插入1
右移位操作符(不区分正负)>>>将右侧指定位数向右移动,无论正负,在高位插入0

3类操作符均可和 “=” 进行组合,将移位后的值赋值给被移位对象(<<=、>>=、>>>=)。

1.左移位操作符

        int i1 = 2;
        System.out.println("十进制======="+i1);
        System.out.println("二进制======="+Integer.toBinaryString(i1));
        i1 <<= 2;
        System.out.println("十进制======="+i1);
        System.out.println("二进制======="+Integer.toBinaryString(i1));
十进制=======2
二进制=======10
十进制=======8
二进制=======1000

2.右移位操作符(区分正负)
正号运算

        int i1 = 16;
        System.out.println("十进制=======" + i1);
        System.out.println("二进制=======" + Integer.toBinaryString(i1));
        i1 >>= 2;
        System.out.println("十进制=======" + i1);
        System.out.println("二进制=======" + Integer.toBinaryString(i1));
十进制=======16
二进制=======10000
十进制=======4
二进制=======100

负号运算

        int i1 = -16;
        System.out.println("十进制=======" + i1);
        System.out.println("二进制=======" + Integer.toBinaryString(i1));
        i1 >>= 2;
        System.out.println("十进制=======" + i1);
        System.out.println("二进制=======" + Integer.toBinaryString(i1));
十进制=======-16
二进制=======11111111111111111111111111110000
十进制=======-4
二进制=======11111111111111111111111111111100

3.右移位操作符(不区分正负)

        int i1 = 16;
        System.out.println("十进制=======" + i1);
        System.out.println("二进制=======" + Integer.toBinaryString(i1));
        i1 >>>= 2;
        System.out.println("十进制=======" + i1);
        System.out.println("二进制=======" + Integer.toBinaryString(i1));
十进制=======16
二进制=======10000
十进制=======4
二进制=======100
        int i1 = -16;
        System.out.println("十进制=======" + i1);
        System.out.println("二进制=======" + Integer.toBinaryString(i1));
        i1 >>>= 2;
        System.out.println("十进制=======" + i1);
        System.out.println("二进制=======" + Integer.toBinaryString(i1));
十进制=======-16
二进制=======11111111111111111111111111110000
十进制=======1073741820
二进制=======111111111111111111111111111100

注意事项

1.在使用移位操作符的时候,移动的位数不要超过该类型的位数长度,int 类型占 32 位,long 类型占 64 位,否则运算结果会不正确。

(1)int 类型

        int i1 = 2;
        System.out.println("十进制=======" + i1);
        System.out.println("二进制=======" + Integer.toBinaryString(i1));
        System.out.println("i1 << 30 的二进制=======" + Integer.toBinaryString(i1 << 30));
        System.out.println("i1 << 31 的二进制=======" + Integer.toBinaryString(i1 << 31));
十进制=======2
二进制=======10
i1 << 30 的二进制=======10000000000000000000000000000000
i1 << 31 的二进制=======0

(2)long类型

        long l1 = 2L;
        System.out.println("十进制=======" + l1);
        System.out.println("二进制=======" + Long.toBinaryString(l1));
        System.out.println("i1 << 62 的二进制=======" + Long.toBinaryString(l1 << 62));
        System.out.println("i1 << 63 的二进制=======" + Long.toBinaryString(l1 << 63));
十进制=======2
二进制=======10
i1 << 62 的二进制=======1000000000000000000000000000000000000000000000000000000000000000
i1 << 63 的二进制=======0

2.char 、byte 、short 类型在进行移位运算时,会转换为 int 类型,并且运算结果也为 int 类型。

        int i1 = 2;
        char c1 = 2;
        byte b1 = 2;
        short s1 = 2;
        System.out.println("i1 的二进制位" + Integer.toBinaryString(i1));
        System.out.println("c1 的二进制位" + Integer.toBinaryString(c1));
        System.out.println("b1 的二进制位" + Integer.toBinaryString(b1));
        System.out.println("s1 的二进制位" + Integer.toBinaryString(s1));
        System.out.println("i1 的二进制=======" + Integer.toBinaryString(i1 << 30));
        System.out.println("c1 的二进制=======" + Integer.toBinaryString(c1 << 30));
        System.out.println("b1 的二进制=======" + Integer.toBinaryString(b1 << 30));
        System.out.println("s1 的二进制=======" + Integer.toBinaryString(s1 << 30));
i1 的二进制位10
c1 的二进制位10
b1 的二进制位10
s1 的二进制位10
i1 的二进制=======10000000000000000000000000000000
c1 的二进制=======10000000000000000000000000000000
b1 的二进制=======10000000000000000000000000000000
s1 的二进制=======10000000000000000000000000000000

3.char 、byte 、short 类型在进行移位运算时,若使用 “=” 号将运算结果赋值给被转换对象,int 类型的运算结果会被截取指定位数(char、short 截取16位,byte 类型截取8位)后再赋值,会造成不正确的运算结果。

        char c1 = 2;
        System.out.println("c1 的二进制=======" + Integer.toBinaryString(c1 << 14));
        c1 <<= 14;
        System.out.println("c1 的二进制=======" + Integer.toBinaryString(c1));
        char c2 = 2;
        System.out.println("c2 的二进制=======" + Integer.toBinaryString(c2 << 15));
        c2 <<= 15;
        System.out.println("c2 的二进制=======" + Integer.toBinaryString(c2));
c1 的二进制=======1000000000000000
c1 的二进制=======1000000000000000
c2 的二进制=======10000000000000000
c2 的二进制=======0

本次分享至此结束,希望本文对你有所帮助,若能点亮下方的点赞按钮,在下感激不尽,谢谢您的【精神支持】。

若有任何疑问,也欢迎与我交流,若存在不足之处,也欢迎各位指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BaymaxCS

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值