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即:-105>>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即:-35>>>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=01^0=10^1=10^0=0.
总结
到此这篇关于Java中左移和右移问题的文章就介绍到这了,更多相关Java左移和右移内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
相关文章
Spring的@Autowired加到接口上但获取的是实现类的问题
这篇文章主要介绍了Spring的@Autowired加到接口上但获取的是实现类的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-10-10SpringBoot 下集成缓存工具类 CacheManager
这篇文章主要介绍了Springboot下集成缓存工具类CacheManager,想进一步了解相关知识的同学,可以详细阅读本文2023-03-03spring boot参数验证注解@NotNull、@NotBlank和@NotEmpty区别解析
使用spring boot参数验证是常常会使用@NotNull、@NotBlank和@NotEmpty三个判断是否不为空的注解,中文都有不能为空的意思,大部分使用者都傻傻分清它们之间到底有什么区别,今天就让咱们来一起探索它们之间的不同吧,感兴趣的朋友一起看看吧2024-05-05Spring Boot项目中定制PropertyEditors方法
在本篇文章里小编给大家分享的是一篇关于Spring Boot定制PropertyEditors的知识点内容,有需要的朋友们可以参考学习下。2019-11-11Springboot2.6.x高版本与Swagger2版本冲突问题解决方法
Spring Boot 2.6.x版本引入依赖 springfox-boot-starter (Swagger 3.0) 后,启动容器会报错,本文就介绍一下Springboot2.6.x高版本与Swagger2版本冲突问题解决方法,感兴趣的可以了解一下2022-04-04
最新评论