【发布时间】:2020-08-16 04:23:11
【问题描述】:
例如,我有一个 uint,其中一些位设置为 1:
uint x = 0b0000_0100_0010_0000
我需要向左/向右重复 N 次。像这样:
重复左,N = 1:0000_1100_0110_0000
重复左,N = 2: 0001_1100_1110_0000
重复右,N = 4: 0000_0111_1111_1110
所以这就像“重复按位移位”。有没有一种有效的方法来实现这一点,最好不要循环?
【问题讨论】:
-
不能开箱即用。
-
@TanveerBadar 如果不循环就无法实现,也许有办法只用一点点?
-
“左移,然后按位或”可以看作是一个乘法,所以
x * ((2 << N) - 1)可以做到只要移位的位不与现有位重叠。
标签: c# bitwise-operators bit bit-shift