移位运算
左移
逻辑左移和算数左移的效果是一样的,高位移出,低位补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]
[Xw−1,Xw−2,Xw−3,...,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] [Xw−k−1,Xw−k−2,...,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]
[Xw−1,Xw−2,Xw−3,...,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,Xw−1,Xw−2,Xw−3,...,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]
[Xw−1,Xw−2,Xw−3,...,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},] [Xw−1,...,Xw−1,Xw−1,Xw−1,Xw−1,Xw−2,Xw−3,...,Xk,]
这里补k个X_{w-1}_.
举个例子文章来源:https://www.toymoban.com/news/detail-401534.html
操作 | 值 |
---|---|
参数x | [0110 0011] [1001 0101] |
x<<4 | [0011 0000] [0101 0000] |
x>>4(逻辑右移) | [0000 0110] [0000 1001] |
x>>4(算术右移) | [0000 0110] [1111 1001] |
在c语言里对于有符号数可以是逻辑右移,但是几乎所有编译器都是算术右移,对于无符号数必须是逻辑右移的。文章来源地址https://www.toymoban.com/news/detail-401534.html
到了这里,关于c语言之移位运算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!