设置在给定的第L个位置到第R个位置之间的另一个数字B的二进制表示中设置的数字A的二进制表示中的所有位。
例如:
A = 12(1100)
B = 11(1011)且L = 2,R = 3(位置从1开始);最后是
A = 14(1110){将A的第3位设为B的第3位为1}。
可以简单地将A和B转换为二进制表示,并在给定范围内设置B中设置的A位。
有没有更方便有效的方法呢?
答案 0 :(得分:1)
使用按位运算符:
A | ((1 << R) - (1 << (L-1)) & B)
说明:右移1位R位以获得2^R
。按2^(L-1)
减去它,以获得包含1
和L
之间所有R
的数字。按位 - 并使用B
获取B
的位掩码。按位或设置A
位。