Skip to content

Commit 02634c8

Browse files
author
github-actions[bot]
committed
clang-format and clang-tidy fixes for 0a19d1a
1 parent 0a19d1a commit 02634c8

File tree

1 file changed

+37
-40
lines changed

1 file changed

+37
-40
lines changed

bit_manipulation/next_higher_number_with_same_number_of_set_bits.cpp

+37-40
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
* implementation
66
*
77
* @details
8-
* Given a number x, find next number with same number of 1 bits in it’s binary representation.
9-
* For example, consider x = 12, whose binary representation is 1100 (excluding leading zeros on 32 bit machine).
10-
* It contains two logic 1 bits. The next higher number with two logic 1 bits is 17 (100012).
8+
* Given a number x, find next number with same number of 1 bits in it’s binary
9+
* representation. For example, consider x = 12, whose binary representation is
10+
* 1100 (excluding leading zeros on 32 bit machine). It contains two logic 1
11+
* bits. The next higher number with two logic 1 bits is 17 (100012).
1112
*
1213
* A binary number consists of two digits. They are 0 & 1. Digit 1 is known as
1314
* set bit in computer terms.
@@ -28,43 +29,39 @@ namespace bit_manipulation {
2829
* @param x the number that will be calculated
2930
* @returns a number
3031
*/
31-
uint64_t next_higher_number(uint64_t x)
32-
{
33-
34-
uint64_t rightOne;
35-
uint64_t nextHigherOneBit;
36-
uint64_t rightOnesPattern;
37-
38-
uint64_t next = 0;
39-
40-
if(x)
41-
{
42-
43-
// right most set bit
44-
rightOne = x & -(signed)x;
45-
46-
// reset the pattern and set next higher bit
47-
// left part of x will be here
48-
nextHigherOneBit = x + rightOne;
49-
50-
// nextHigherOneBit is now part [D] of the above explanation.
51-
52-
// isolate the pattern
53-
rightOnesPattern = x ^ nextHigherOneBit;
54-
55-
// right adjust pattern
56-
rightOnesPattern = (rightOnesPattern)/rightOne;
57-
58-
// correction factor
59-
rightOnesPattern >>= 2;
60-
61-
// rightOnesPattern is now part [A] of the above explanation.
62-
63-
// integrate new pattern (Add [D] and [A])
64-
next = nextHigherOneBit | rightOnesPattern;
65-
}
66-
67-
return next;
32+
uint64_t next_higher_number(uint64_t x) {
33+
uint64_t rightOne = 0;
34+
uint64_t nextHigherOneBit = 0;
35+
uint64_t rightOnesPattern = 0;
36+
37+
uint64_t next = 0;
38+
39+
if (x) {
40+
// right most set bit
41+
rightOne = x & -static_cast<signed>(x);
42+
43+
// reset the pattern and set next higher bit
44+
// left part of x will be here
45+
nextHigherOneBit = x + rightOne;
46+
47+
// nextHigherOneBit is now part [D] of the above explanation.
48+
49+
// isolate the pattern
50+
rightOnesPattern = x ^ nextHigherOneBit;
51+
52+
// right adjust pattern
53+
rightOnesPattern = (rightOnesPattern) / rightOne;
54+
55+
// correction factor
56+
rightOnesPattern >>= 2;
57+
58+
// rightOnesPattern is now part [A] of the above explanation.
59+
60+
// integrate new pattern (Add [D] and [A])
61+
next = nextHigherOneBit | rightOnesPattern;
62+
}
63+
64+
return next;
6865
}
6966

7067
} // namespace bit_manipulation

0 commit comments

Comments
 (0)