Java 移位运算符 >>、<< 、>>是怎样进行运算的?

今天不知为啥突然想知道 移位运算符 是怎么进行计算的。

>> 带符号右移

带符号右移,将整数换为二进制 向右移动一位 并且 正数在最高位添0,负数在最高位添 1。
例:

  1. 正数

10>>1 就相当于(1010)右移一位 最高位添0 —>(0101)转为十进制也就是 5(其实正数的带符号左右移 就相当于 乘以(左移)/除以(右移)2的n次方(这里的n指的是 符号右边的数值))

  1. 负数

-10>>1 相当于(‭1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 0110‬)右移一位 最高位添 1 —>(‭1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1011‬)也就是 -5

<<带符号左移

跟右移恰恰相反 是往左移动的,此处略过。。。

>>> 无符号右移

意思就是 往右移动不带符号,不论正的负的 右移之后 都在最高位添 0;
1.正数

正数无符号右移跟有符号右移是一样的 不涉及变号问题,重点在 负数 会变号

2.负数

负数除了同样的右移之外 会在最高位 添个零 大家都知道 最高位符号位 0代表正 1代表负 本来是负数的 最高位符号位添了 0 就变为正数了。
例:

-1>>>1 也就是(‭1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111‬)右移一位 之后最高位 添 0 就变为 (‭0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111‬)转为十进制就是 2,147,483,647‬

That 's all ,有错误欢迎指出,错误必当改正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值