-
-
Notifications
You must be signed in to change notification settings - Fork 7.3k
/
set_kth_bit.cpp
80 lines (73 loc) · 2.44 KB
/
set_kth_bit.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/**
* @file
* @brief Implementation to [From the right, set the Kth bit in the binary
* representation of N]
* (https://practice.geeksforgeeks.org/problems/set-kth-bit3724/1/) in an
* integer.
*
* @details
* Given a number N and a value K. From the right, set the Kth bit in the binary
* representation of N. The position of Least Significant Bit(or last bit) is 0,
* the second last bit is 1 and so on. in it.
*
* A binary number consists of two digits. They are 0 & 1. Digit 1 is known as
* set bit in computer terms.
* Worst Case Time Complexity: O(1)
* Space complexity: O(1)
* @author [Aman Raj](https://github.com/aman2000raj)
*/
#include <cassert> /// for assert
#include <cstdint>
#include <iostream> /// for IO operations
/**
* @namespace bit_manipulation
* @brief Bit manipulation algorithms
*/
namespace bit_manipulation {
/**
* @namespace setKthBit
* @brief Functions for the [From the right, set the Kth bit in the binary
* representation of N]
* (https://practice.geeksforgeeks.org/problems/set-kth-bit3724/1/)
* implementation
*/
namespace set_kth_bit {
/**
* @brief The main function implements set kth bit
* @param N is the number whose kth bit will be set
* @returns returns an integer after setting the K'th bit in N
*/
std::uint64_t setKthBit(std ::int64_t N,
std ::int64_t k) { // int64_t is preferred over int so
// that no Overflow can be there.
int pos =
1 << k; // "pos" variable is used to store 1 at kth postion and
// rest bits are 0. in binary representation of number 'n'
return N | pos; // by taking or with the pos and the N we set the bit of N
// at kth position.
}
} // namespace set_kth_bit
} // namespace bit_manipulation
/**
* @brief Self-test implementations
* @returns void
*/
static void test() {
// n = 10,2 return 14
assert(bit_manipulation::set_kth_bit::setKthBit(10, 2) == 14);
// n = 25,1 return 27
assert(bit_manipulation::set_kth_bit::setKthBit(25, 1) == 27);
// n = 400001,5 return 400033
assert(bit_manipulation::set_kth_bit::setKthBit(400001, 5) == 400033);
// n = 123 return 123
assert(bit_manipulation::set_kth_bit::setKthBit(123, 3) == 123);
std::cout << "All test cases successfully passed!" << std::endl;
}
/**
* @brief Main function
* @returns 0 on exit
*/
int main() {
test(); // run self-test implementations
return 0;
}