【知识积累】位移运算(<<、>>、>>>)

1、位移运算

原码
反码 = 原码取反
补码 = 反码 + 1

<<表示左移,不分正负数,低位补0;
方式一:补码左移几位,然后再转回原码
方式二:左移几位,乘以2的几次方

举例:

20 << 2
00010100 :20
11101011 :反码
11101100 :补码(+1)
10110000 :补码左移2位
10101111 :反码(-1)
01010000 :原码
2*2*2*2*2*2 + 2*2*2*2 = 64 + 16 = 80
20 * 2 * 2 = 80
-20 << 2
10010100 :-20
11101011 :反码
11101100 :补码(+1)
10110000 :补码右移2位
10101111 :反码(-1)
11010000 :原码
2*2*2*2*2*2 + 2*2*2*2 = 64 + 16 = -80
20 * 2 * 2 = -80

>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;
方式一:补码右移几位,然后再转回原码
方式二:右移几位,除以2的几次方

举例:

20 >> 2
00010100 :20
11101011 :反码
11101100 :补码(+1)
00111011 :补码右移2位
00111010 :反码(-1)
00000101 :原码
2*2 + 2*1 = 5
20 / 4 = 5
-20 >> 2
10010100 :-20
11101011 :反码
11101100 :补码(+1)
11111011 :补码右移2位
11111010 :反码(-1)
10000101 :原码
2*2 + 2*1 = -5
20 / 4 = -5

>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0;

举例:

20 >>> 2
00010100 :20
11101011 :反码
11101100 :补码(+1)
00111011 :补码右移2位
00111010 :反码(-1)
00000101 :原码
2*2 + 2*1 = 5
20 / 4 = 5
-20 >>> 2
10010100 :-20
11101011 :反码
11101100 :补码(+1)
10011011 :补码右移2位
10011010 :反码(-1)
11100101 :原码

2、常见写法

n / 2 -> n >> 1
n * 2 -> n << 1
n * 2 + 1 -> (n << 1) | 1
举例:

20 << 1
00010100 :20
11101011 :反码
11101100 :补码(+1)
11011000 :补码左移1位
11010111 :反码(-1)
00101000 :原码
2*2*2*2*2 + 2*2*2 = 32 + 8 = 40
20 * 2 = 40

20 * 2 + 1 = (20 << 1) | 1
00101000 | 00000001 = 00101001

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值