on writing a number as 2^s * q, where q is odd
jak
nospam at please.ty
Tue Dec 5 06:09:57 EST 2023
Alan Bawden ha scritto:
> If you like this sort of stuff, check out the book "Hacker's Delight" by
> Henry Warren. See<https://en.wikipedia.org/wiki/Hacker%27s_Delight>.
Thank you for your suggestion. Really interesting. Just for fun I tried
to port the function to 64 bit:
def bit_count_64(n):
lt = n >> 62
n &= (~(0x3f << 62)) & ((1 << 63) - 1)
n = (n - ((n >> 1) & 0o333333333333333333333)
- ((n >> 2) & 0o111111111111111111111))
n = ( (n & 0o307070707070707070707)
+ ((n & 0o070707070707070707070) >> 3))
return (n % 63) + (0, 1, 1, 2)[lt]
n=0xffffffffffffffff
bit_count_64(n)
64
n=0x3ffffffffffffffe
bit_count_64(n)
61
bit_count_64(1 << 63)
1
...in C it would have been simpler :^)
More information about the Python-list
mailing list