Java中运算符之移位运算

本文深入探讨了Java中的移位运算符,包括有符号左移、有符号右移和无符号右移的原理及应用。通过具体示例,详细解释了这些运算符如何处理正数和负数,并展示了它们在位操作中的效果。

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

一 概述

Java中运算符的优先级和结合性表

二 移位运算符

1.按位有符号左移(<<)

       //按位有符号左移(<<)
        /*
        * 00001000  8 (8对应的二进制数)
        * 00100000  32 (8左移动2位后的二进制数)
        * */
        int a = 8<<2;
        System.out.println("8以有符号的方式左移两位:"+a);

        /*
        * 10001000  -8 (-8的二进制)
        * 11110111  -8的反码
        * 11111000  -8的补码
        * 11100000   整体左移两位后,高位溢出的部分舍去
        * 11011111   再-1得反码
        * 10100000   按位取反,最高位为符号位,结果为-32
        * */
        int b = -8<<2;
        System.out.println("-8以有符号的方式左移两位:"+b);

执行后的结果:

8以有符号的方式左移两位:32
-8以有符号的方式左移两位:-32

2. 按位有符号右移(>>)

        //按位有符号右移(>>)
        /*
         * 00001000  8 (8对应的二进制数)
         * 00000010  2 (8右移动2位后的二进制数)
         * */
        int c = 8>>2;
        System.out.println("8以有符号的方式右移两位:"+c);

        //右移后负数位用1填充
        /*
         * 10001000  -8 (-8的二进制)
         * 11110111  -8的反码
         * 11111000  -8的补码
         * 11111110   整体右移两位后
         * 11111101   再-1得反码
         * 10000010   按位取反,最高位为符号位,结果为-2
         * */
        int d = -8>>2;
        System.out.println("-8以有符号的方式右移两位:"+d);

执行后的结果:

8以有符号的方式右移两位:2
-8以有符号的方式右移两位:-2

3. 按位无符号右移 (>>>)

        //按位无符号右移(>>>)
        /*
        * 正数和有符号右移一样,负数的无符号右移动,就是相应的补码移位所得,高位补0即可
        * */
        int e = 8>>>2;
        System.out.println("8以无符号的方式右移两位:"+e);

        /*
        * 10000000 00000000 00000000 00001000 -8(32位无符号的-8)
        * 11111111 11111111 11111111 11110111 -8的反码
        * 11111111 11111111 11111111 11111000 -8的补码
        * 00111111 11111111 11111111 11111000  无符号右移两位,不取原码,直接输出
        * */
        int f = -8>>>2;
        System.out.println("-8以无符号的方式右移两位:"+f);

执行后的结果:

8以无符号的方式右移两位:2
-8以无符号的方式右移两位:1073741822

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值