c语言之移位运算

移位运算

左移

逻辑左移和算数左移的效果是一样的,高位移出,低位补0.

对于一个位长位W的数来说,左移K位。(通常来讲K<W)

高k位移出,低k位补0.

把下面这个w位的位向量左移K位。
[ X w − 1 , X w − 2 , X w − 3 , . . . , X 3 , X 2 , X 1 , X 0 ] [X_{w-1},X_{w-2},X_{w-3},...,X_3,X_2,X_1,X_0] [Xw1,Xw2,Xw3,...,X3,X2,X1,X0]

[ X w − k − 1 , X w − k − 2 , . . . , X 3 , X 2 , X 1 , X 0 , 0 , 0 , 0 , 0... , 0 , 0 , 0 ] [X_{w-k-1},X_{w-k-2},...,X_3,X_2,X_1,X_0,0,0,0,0...,0,0,0] [Xwk1,Xwk2,...,X3,X2,X1,X0,0,0,0,0...,0,0,0]

后面会有K个0.

右移

逻辑右移和算术右移

逻辑右移是低位移出,高位补0的。算数右移的高位是复制最高位的。

逻辑右移
[ X w − 1 , X w − 2 , X w − 3 , . . . , X 3 , X 2 , X 1 , X 0 ] [X_{w-1},X_{w-2},X_{w-3},...,X_3,X_2,X_1,X_0] [Xw1,Xw2,Xw3,...,X3,X2,X1,X0]

[ 0 , 0 , . . . , 0 , 0 , X w − 1 , X w − 2 , X w − 3 , . . . , X k , ] [0,0,...,0,0,X_{w-1},X_{w-2},X_{w-3},...,X_{k},] [0,0,...,0,0,Xw1,Xw2,Xw3,...,Xk,]
这里补充k个0.

算术右移
[ X w − 1 , X w − 2 , X w − 3 , . . . , X 3 , X 2 , X 1 , X 0 ] [X_{w-1},X_{w-2},X_{w-3},...,X_3,X_2,X_1,X_0] [Xw1,Xw2,Xw3,...,X3,X2,X1,X0]

[ X w − 1 , . . . , X w − 1 , X w − 1 , X w − 1 , X w − 1 , X w − 2 , X w − 3 , . . . , X k , ] [X_{w-1},...,X_{w-1},X_{w-1},X_{w-1},X_{w-1},X_{w-2},X_{w-3},...,X_{k},] [Xw1,...,Xw1,Xw1,Xw1,Xw1,Xw2,Xw3,...,Xk,]

这里补k个X_{w-1}_.

举个例子

操作
参数x[0110 0011] [1001 0101]
x<<4[0011 0000] [0101 0000]
x>>4(逻辑右移)[0000 0110] [0000 1001]
x>>4(算术右移)[0000 0110] [1111 1001]

在c语言里对于有符号数可以是逻辑右移,但是几乎所有编译器都是算术右移,对于无符号数必须是逻辑右移的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值