📜  将所有位设置为数字的给定范围

📅  最后修改于: 2021-04-27 09:43:17             🧑  作者: Mango

给定一个非负数n和两个值l和r。问题是设置n的二进制表示形式中范围在l到r之间的位,即,未设置从最右边的第l位到最右边的第r位的位。
约束:1 <= l <= r <= n的二进制表示形式的位数。

例子 :

Input : n = 17, l = 2, r = 3
Output : 23
(17)10 = (10001)2
(23)10 = (10111)2
The bits in the range 2 to 3 in the binary
representation of 17 are set.

Input : n = 50, l = 2, r = 5
Output : 62

方法:以下是步骤:

1. Find a number 'range' that has all set
   bits in given range. And all other bits
   of this number are 0.
     range = (((1 << (l - 1)) - 1) ^ 
              ((1 << (r)) - 1));

2. Now, perform "n = n | range". This will 
   set the bits in the range from l to r 
   in n.
C++


Java


Python3


C#


PHP


输出 :

23