左移<< 和 右移>>的通俗计算

左移<< 和 右移>> 是对二进制的位运算。使用位运算能提高效率,但不易阅读

左移右移的原理可以参考这两个博文
https://blog.csdn.net/onezg/article/details/53103559
https://blog.csdn.net/weixin_42837024/article/details/98734787


不在乎原理的话,左移右移是有通俗的使用方法的

一、正数

m左移n位,即m << n
结果:m x 2n

m右移n位,即m >> n
结果:m / 2n

例:
	4 << 2						11 >> 2
	= 4 x 4						= 11 / 4 (2.75)
	= 16						= 2(若为小数,则向下取整) 

二、负数

左移<< 和正数时一样
右移>> 时,若结果为小数,应向上取整

例:
	-4 << 2						-11 >> 2
	= -4 x 4					= -11 / 4 (-2.75)
	= -16						= -3(若为小数,则向上取整)

其实负数 -3 < -2.75 , 则 -2.75 -> -3 其实也算向下取整。但我感觉向上取整更好理解一点。


补充一点:

Java中int的位数为32,因此若 左移运算符<< 右侧的数字大于32的话,实际运算的位移位数为其对32取余的数字。

例:int a = 1 << 34;  a = 4
	1 << 34
	= 1 << (34 % 32)
	= 1 << 2
	= 1 x 4 = 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值