SPUG: Cool power-of-2 trick
Ken Clarke
kenslinux at shaw.ca
Fri Jan 21 03:37:41 PST 2005
----- Original Message -----
From: "Aaron W. West" <tallpeak at hotmail.com>
Sent: Thursday, January 20, 2005 2:42 PM
Subject: Re: SPUG: Cool power-of-2 trick
>I wonder if there's a quick way to find the smallest power of two equal to
> or greater than a given number.
Sure, by counting the number of characters in the binary representation of
the given number less 1, then raising 2 to the power of the count:
$smallest_power_of_two = 2**(length(sprintf "%b", $given_number - 1));
$given_number must be > 1 because subtracting 1 does not produce a zero
character binary representation. You know that the answer for all numbers
below 2 (including negative numbers) is 1 anyway (2**0 = 1). I also found
that it breaks down for given numbers larger than 2**30 but your mileage may
vary as they say...
There are 10 types of people in the world; those who know binary and those
who don't.
>> Ken Clarke
>> Contract Web Programmer / E-commerce Technologist
>> www.PerlProgrammer.net
More information about the spug-list
mailing list