From 2d5e8f291154d2461c073896eee697f90c206e0f Mon Sep 17 00:00:00 2001 From: siddwarr Date: Mon, 2 Oct 2023 19:16:15 +0530 Subject: [PATCH] added largest_power_of_2 --- bit_manipulation/largest_power_of_2 | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 bit_manipulation/largest_power_of_2 diff --git a/bit_manipulation/largest_power_of_2 b/bit_manipulation/largest_power_of_2 new file mode 100644 index 000000000000..6e1265dc7560 --- /dev/null +++ b/bit_manipulation/largest_power_of_2 @@ -0,0 +1,18 @@ +def largest_power_of_2(number: int) -> int: + """ + returns the largest power of 2 that is less than or equal to the given number + The way this works is that we shift the binary form of the number to the right until we reach the last set bit + Using the number of times we had to shift to find the last set bit, we find the 2**(no of times shifted) which will be the ans + """ + + last_set_bit = 0 + while number: + last_set_bit+=1 + number>>=1 + return 2**(last_set_bit-1) + + +if __name__ == "__main__": + import doctest + + doctest.testmod()