Java中左移和右移问题图文详解

 更新时间:2021年11月21日 10:49:08   作者:CLAY超  
左移和右移并不常用,在一些特殊情况下才会使用,比如加解密时,会大量用到,这篇文章主要给大家介绍了关于Java中左移和右移问题的相关资料,需要的朋友可以参考下

 1 原码、反码、补码

原码:将十进制转化为二进制即原码;
反码:正数的反码与原码相同,负数的反码(除却最高位的符号位不变)与原码相反;
补码:正数的补码与原码相同,负数的补码(除却最高位的符号位不变)与原码的取反加一。
举例:5 和 -5
5:
原码:0 0000000 00000000 00000000 00000101
反码:0 0000000 00000000 00000000 00000101
补码:0 0000000 00000000 00000000 00000101
-5:
原码:1 00000000 00000000 00000000 00000101
反码:1 1111111 11111111 11111111 11111010
补码:1 1111111 11111111 11111111 11111011

2 位移操作

我们需要知道将一个数字,在计算机中进行移动多少位,例如8<<1代表将8转化为二进制在计算机中左移1位,低位补零;
<<:左移:低位补0
>>:有符号右移:正数高位补0,负数高位补1
>>>:无符号右移,高位补零
为什么没有无符号左移呢?因为左移的情况下只存在补零的情况。
举例 :5 和 -5
5<<1
原码:0 0000000 00000000 00000000 00000101
左移1位:0 0000000 00000000 00000000 00001010
即:10
-5<<1
原码:1 00000000 00000000 00000000 00000101
补码:1 1111111 11111111 11111111 11111011
左移1位:1 1111111 11111111 11111111 11110110
取其补码:1 0000000 00000000 00000000 00001010
即:-10
5>>1
原码:0 0000000 00000000 00000000 00000101
右移1位:0 0000000 00000000 00000000 00000010
即:2
-5>>1
原码:1 00000000 00000000 00000000 00000101
补码:1 1111111 11111111 11111111 11111011
右移1位:1 1111111 11111111 11111111 11111101
取其补码:1 0000000 00000000 00000000 00000011
即:-3
5>>>1:与5>>1一样,都是高位补0
原码:0 0000000 00000000 00000000 00000101
右移1位:0 0000000 00000000 00000000 00000010
即:2
-5>>>1
原码:1 00000000 00000000 00000000 00000101
补码:1 1111111 11111111 11111111 11111011
右移1位:0 1111111 11111111 11111111 11111101
即:2147483645
代码运行截图

总结:

位移操作很简单,使用补码移动,补齐空缺位就行,除了>>:补与最高位一致的;其他移动哪缺哪补零。
在java中无论截图中的a定义成 byte,short,int哪一种类型,它默认都是使用int类型(4字节32位),你使用long(8字节64位)

3 补充操作符

~(按位非):
逐位取反
|(按位或):
一真为真
1|0=1,
0|0=0,
1|1=1,
0|1=1
&(按位与):
两真为真
1|0=0,
0|0=0,
1&1=1;
0&1=0
^(按位异或):
相异为真
1^1=0
1^0=1
0^1=1
0^0=0.

总结

到此这篇关于Java中左移和右移问题的文章就介绍到这了,更多相关Java左移和右移内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入学习Java 动态代理

    深入学习Java 动态代理

    Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。下面小编和大家来一起学习一下吧
    2019-05-05
  • SpringBoot事务注解超详细讲解

    SpringBoot事务注解超详细讲解

    这篇文章主要给大家介绍了关于SpringBoot事务注解的相关资料,在Spring Boot中,事务管理是一个非常重要的概念,我们可以使用事务注解来控制事务的行为,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • 详解JAVA类加载机制(推荐)

    详解JAVA类加载机制(推荐)

    这篇文章主要介绍了JAVA类加载机制的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • Springboot跨域问题三种解决方案

    Springboot跨域问题三种解决方案

    这篇文章主要介绍了Springboot跨域问题三种解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • SpringBoot2.x设置Session失效时间及失效跳转方式

    SpringBoot2.x设置Session失效时间及失效跳转方式

    这篇文章主要介绍了SpringBoot2.x设置Session失效时间及失效跳转方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • maven 指定version不生效的问题

    maven 指定version不生效的问题

    这篇文章主要介绍了maven 指定version不生效的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • JAVA基本类型包装类 BigDecimal BigInteger 的使用

    JAVA基本类型包装类 BigDecimal BigInteger 的使用

    Java 中预定义了八种基本数据类型,包括:byte,int,long,double,float,boolean,char,short,接下来文章小编将向大家介绍其中几个类型的内容,需要的朋友可以参考下文章
    2021-09-09
  • 深入解析Java的设计模式编程中单例模式的使用

    深入解析Java的设计模式编程中单例模式的使用

    这篇文章主要介绍了深入解析Java的设计模式编程中单例模式的使用,一般来说将单例模式分为饿汉式单例和懒汉式单例,需要的朋友可以参考下
    2016-02-02
  • mybatis-plus更新字段为null的处理方式

    mybatis-plus更新字段为null的处理方式

    这篇文章主要介绍了mybatis-plus更新字段为null的处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java关于桶排序的知识点总结

    Java关于桶排序的知识点总结

    这篇文章给大家总结了关于JAVA中J桶排序的相关知识点和用法分享,有兴趣的读者跟着学习下。
    2018-04-04

最新评论