欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

移位操作摘要

程序员文章站 2022-06-01 12:12:00
...

概述:

移位操作都是在二进制层面进行操作的,需要具有一定二进制运算基础。有兴趣的小伙伴可以去研究研究《计算机组成原理》这本教材,网易公开课的《编译原理》也是不错的选择。

有符号左移运算符:<<

二进制数据整体左移一位,最低位补0。以整数8为例子:

8的二进制:1000
左移一位 : 8 <<1 
左移动后的二进制:0001 0000
0001 0000对应的十进制:
16= 0*2^7+0*2^6+0*2^5+1*2^4+0*2^3+0*2^2+0*2^1+0*2^0
= 1*2^4 = 2*(1*2^3) = 8<<1 = 2*8

左移运算遵循以上规律,所以 x<<n 就相当于 x*2^n

有符号右移运算符:>>

二进制数据整体右移一位,正数最高位补0,负数(补码形式存储)最高位补1。右移就是左移的逆操作,所以 x>>n 就相当于 x/2^n

无符号右移运算符:>>>

二进制数据整体右移一位,最高位始终补0,所以对正数而言和有符号右移效果一致,对负数而言大相径庭。

总结

作为一个java开发,虽然java已经实现了这三种运算符,且使用移位运算符计算更快。但是建议除非必须使用,否则还是不要用位移运算去进行计算操作。因为无形中就提升了代码阅读成本和维护成本

相关标签: 随笔