• Java中的移位操作符


    记住所有的移动位数,针对的都是补码来讲的,所以要先将十进制整数转换成补码后,然后再来进行移位操作

    移位操作 还要注意类型的约束条件,例如int,移动范围是0-31位,所以看补码只能看最后五位,这才是有效数字;long移动范围是0-63,所以补码只能看最后六位。

    右移操作符

    左位移操作符(<<):无论是有符号数还是无符号数,都低位补0。

    有符号右移位操作符(>>):用符号扩展,为正高位补0,为负高位补1。

    无符号小技巧:移位赋值

     

    i >>= 10;

     

    将i右移10位后的值再赋给i。等价于:i = i >> 10;。

     

    移位预处理

     

    char、byte、shor类型进行移位操作时,先会自动转换为int类型再移位。由于int类型只有32位,所以,当出现移位:

     

    i << 127;

     

    时,int型的i当然不会左移127位,而只会左移32位(32 = 2^5,127 = 1111 1111)。所以,int类型移位的时候,移位数只有低5位有效。同理,long类型移位时,移位数只有低6位有效。

    实例:

    public class Main {
    	public static void main(String[] args) {
    		System.out.println(1 << -2);
    		System.out.println(1 << 30);
    
    		System.out.println(1L << -2);
    		System.out.println(1L << 62);
    	}
    }

     

    1073741824
    1073741824
    4611686018427387904
    4611686018427387904


    int 是32位的,long 是64位的,移动负数位或者超过位数的应该取余数到 0~31, 0~63之间。

     

  • 相关阅读:
    IDEA 远程调试springboot
    Mybatitas-plus实现逻辑删除
    java通过poi导出excel
    js 展示当前时间
    Linux环境下服务自启
    Spring自带定时器@Scheduled
    Quartz任务调度框架相关方法、参数理解
    Quartz 实现定时任务
    mysql 使用union(all) + order by 导致排序失效
    mongodb的查询操作
  • 原文地址:https://www.cnblogs.com/wzyxidian/p/4769577.html
Copyright © 2020-2023  润新知