Dear all C programmer:
X = 1 << N;      (left shift) 
how to recover N from X ?
Thanks
Dear all C programmer:
X = 1 << N;      (left shift) 
how to recover N from X ?
Thanks
 
    
    N in this case is the bit position where you shifted in a 1 at. Assuming that X here only got one bit set. Then to find out what number that bit position corresponds to, you have to iterate through the data and mask with bitwise AND:
for(size_t i=0; i<sizeof(X)*8; i++)
  if(X & (1<<i))
    printf("%d", i);
If performance is important, then you'd make a look-up table with all possible results instead.
 
    
    In a while loop, keep shifting right until X==1, record how many times you have to shift right and the counter will give you N.
int var = X;
int count = 0;
while (var != 1){
    var >>= 1; 
    count++;
}
printf("N is %d", count);
 
    
     
    
    Try this (flsl from here which is available from string.h on macOS) :
int flsl(long mask)
{
    int bit;
    if (mask == 0) return (0);
    for (bit = 1; mask != 1; bit++)
        mask = (unsigned long)mask >> 1;
    return (bit);
}
unsigned char binlog(long mask) { return mask ? flsl(mask) - 1 : 0; }
int x = 1 << 20;
printf("%d\n", binlog(x)); ===> 20
