如何用纯位运算判断8位x的偶数位全为1并设置y的值
问题解答
核心思路
要判断8位变量x的所有偶数位(bit0、bit2、bit4、bit6)是否全为1,可基于补码特性推导:
- 当
x的偶数位全为1时,其补码p = ~x + 1的偶数位中仅bit0为1,bit2、bit4、bit6均为0; - 若
x存在任意偶数位不为1,则p的偶数位要么bit0为0,要么bit2/bit4/bit6至少有一个为1。
利用已定义的移位变量a=p>>2、b=p>>4、c=p>>6,可直接提取p的bit2、bit4、bit6(分别对应a、b、c的bit0),结合p的bit0即可完成判断。
填充后的完整代码
p = ~x + 1 a = p >> 2 b = p >> 4 c = p >> 6 d = p >> 8 y = !(((a | b | c) & 1) | !(p & 1))
运算次数验证
上述y的计算共使用7次运算(a|b、|c、&1、p&1、!、|、!),加上前面的4次赋值运算,总次数为11次,符合最多12次运算的限制。
逻辑验证
- 当
x的偶数位全1时:(a|b|c)&1为0(bit2/bit4/bit6均为0),p&1为1(bit0为1),!(p&1)为0,最终!((0)|(0))=1,y=1; - 当
x存在偶数位不为1时:要么p&1为0(bit0不为1),要么(a|b|c)&1为1(bit2/bit4/bit6至少一个不为0),最终!((1)|(0))或!((0)|(1))或!((1)|(1))均为0,y=0。
内容的提问来源于stack exchange,提问作者L4w1i3t
相关产品推荐
相关产品推荐

