Re: portable way to get highest bit set?

Lew Pitcher <[email protected]> Thu, 12 Oct 2023 23:35:08 -0000 (UTC)
Newsgroups comp.lang.c,alt.comp.lang.c
Organization A noiseless patient Spider
Message-ID <[email protected]>
On Wed, 11 Oct 2023 14:54:32 +0000, Lew Pitcher wrote:

> On Wed, 11 Oct 2023 01:56:49 -0500, candycanearter07 wrote:
> 
>> Hi,
>> 
>> What is the best/most portable way to get the highest bit set?
>> 
>> ie. 011010001 to  010000000
> 
> What have you tried?
> 
> I can think of one way, but it may not be the "best" or "most portable"
> way of setting the highest bit of a value, and it /does/ have some
> limitations. Show your work, and I might show mine.

#include <limits.h>
unsigned long long int msb_mask(unsigned long long int valu)
{
  unsigned long long int mask;

  for (mask = ((ULLONG_MAX) ^ (ULLONG_MAX >> 1));
       mask && !(mask&valu);
       mask >>= 1) continue;
  return mask&valu;
}


-- 
Lew Pitcher
"In Skills We Trust"