栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 中算术移位与逻辑移位的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 中算术移位与逻辑移位的区别

一、算术移位

算术移位,符号位不变。

符号位是 1,移位后还是 1。符号位是 0,移位后还是 0。

Java 中用 >>和 <<表示算术移位。

二、逻辑移位

逻辑移位后,符号位填充总是 0。

Java 中用 >>>和 <<<表示逻辑移位。

三、代码
    public static void main(String []args) {
        // 十进制正数: 8
        // 0b 表示是个二进制
        int n = 0b00000000000000000000000000001000;
        System.out.println(n + " binary value: " + Integer.toBinaryString(n));

        // 算术右移一位变为 4,高位用符号位 0 填充
        System.out.println(n + " shift arithmetic right result: " + (n >> 1) + " binary value: " + Integer.toBinaryString(n >> 1));

        // 逻辑右移一位,高位用 0 填充,因此正数没有影响
        System.out.println(n + " shift logical right result: " + (n >>> 1) + " binary value: " + Integer.toBinaryString(n >>> 1));


        // 十进制负数: -8
        // 负数在计算机中用补码表示
        int m = 0b11111111111111111111111111111000;
        System.out.println(m + " binary value: " + Integer.toBinaryString(m));

        // 算术右移一位变为 -4,高位用符号位 1 填充
        System.out.println(m + " shift arithmetic right result: " + (m >> 1) + " binary value: " + Integer.toBinaryString(m >> 1));

        // 逻辑右移一位,高位用 0 填充,打印忽略前面的 0 了,完整是:01111111111111111111111111111100
        System.out.println(m + " shift logical right result: " + (m >>> 1) + " binary value: " + Integer.toBinaryString(m >>> 1));
    }
四、运行结果
8 binary value: 1000
8 shift arithmetic right result: 4 binary value: 100
8 shift logical right result: 4 binary value: 100
-8 binary value: 11111111111111111111111111111000
-8 shift arithmetic right result: -4 binary value: 11111111111111111111111111111100
-8 shift logical right result: 2147483644 binary value: 1111111111111111111111111111100
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1003675.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号