java中的移位操作

java中的移位操作文章目录一、左移<<二、右移1、有符号右移>>2、无符号右移三、补充一、左移<<向左移动,高位丢弃,低位用0补齐不溢出的情况下num<<1相当于num*2例如inti=Integer.MIN_VALUE;System.out.println(Integer.toBinaryString(i));//10000000000000000000000000000000Sys

一、左移 <<

向左移动,高位丢弃,低位用0补齐
不溢出的情况下num<<1相当于num*2
例如

        int i = Integer.MIN_VALUE;
        System.out.println(Integer.toBinaryString(i));
        // 10000000000000000000000000000000
        System.out.println(Integer.toBinaryString(i << 1));
        // 0

二、右移

1、有符号右移 >>

向右移动,高位用符号位补齐,低位丢弃
不溢出的情况下num>>1相当于num/2

        int i = Integer.MIN_VALUE;
        System.out.println(Integer.toBinaryString(i));
        // 10000000000000000000000000000000
        System.out.println(Integer.toBinaryString(i >> 1));
        // 11000000000000000000000000000000

任何一个负数,如果一直右移下去,最终都会得到 -1

        System.out.println(Integer.toBinaryString(i >> 31)); //(i < 0)
        // 11111111111111111111111111111111(-1)

2、无符号右移>>>

向右移动,高位用0补齐,低位丢弃

        int i = -3;
        System.out.println(Integer.toBinaryString(i));
        // 11111111111111111111111111111101
        System.out.println(Integer.toBinaryString(i >>> 1));
        // 1111111111111111111111111111110(第一位的0没有显示)
        System.out.println(i >>> 1);
        // 2147483646

任何一个数,如果一直无符号右移下去,最终都会得到0

        System.out.println(i >>> 31 >>> 1);

三、补充

当移位的位数大于或等于数据类型的表示位数时,会先对移位的位数取模
举个例子:对于int,其表示位数时32位,如果我们要对一个int型的整数num做移位操作,
移动位数为33,那么,计算时会先将33对32取模得到1,然后对num进行1位的移位操作。
如果移动位数是32,那么,不做操作
这也是我上面最后一行代码对i的移位分两次

System.out.println(i >>> 31 >>> 1)System.out.println(i >>> 32)的结果是不一样的

今天的文章java中的移位操作分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/24380.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注