I have no idea how to achieve this, any help would be greatly appreciated and very useful to me.


I have a loop in some computer code, that loops through every single combination of 7 on bits in a 64 bit integer.


For example,



```
Permutation 1:  00...001111111
Permutation 2:  00...010111111
Permutation 3:  00...011011111

```

etc. 


These evaluate to the decimal numbers:



```
Permutation 1:  00...001111111 = 127
Permutation 2:  00...010111111 = 191
Permutation 3:  00...011011111 = 223

```

In total there are:



```
621,216,192

```

Combinations (64 choose 7).


Given any decimal/binary number (it doesn't matter which type), that is guaranteed to be a valid permutation value (we don't need to worry about 128 being passed in for example), how can I calculate which permutation number this is?


IE:



```
whatPermutation(127) = 1;
whatPermutation(191) = 2;
whatPermutation(223) = 3;

```

etc.


Any help would be brilliant, again, I have no idea where to start.



Convert integer to permutation number
Suppose that your 64 bit number is $n=a\_{63} a\_{62} ... a\_0$. Let $i\_7>i\_6>\cdots>i\_1$ be those indices $j$ for which $a\_j=1$. Then 
 $$ whatPermutation(n)=1+{i\_7\choose 7} +{i\_6\choose 6}+\cdots+{i\_1\choose 1}. $$
For instance, if $n= 00\cdots 110001011011$, then
 $$ whatPermutation(n)= 1+{11\choose 7}+{10\choose 6}+{6\choose 5}+{4\choose 4}+{3\choose 3}+ {1\choose 2}+{0\choose 1} $$ $$ = 549. $$


