fonttools/Lib/fontTools/misc/intTools.py
2018-11-10 15:16:52 -05:00

19 lines
441 B
Python

"""Misc integer tools."""
from __future__ import print_function, absolute_import, division
from fontTools.misc.py23 import *
__all__ = ['popCount']
def popCount(v):
"""Return number of 1 bits in an integer."""
if v > 0xFFFFFFFF:
return popCount(v >> 32) + popCount(v & 0xFFFFFFFF)
# HACKMEM 169
y = (v >> 1) & 0xDB6DB6DB
y = v - y - ((y >> 1) & 0xDB6DB6DB)
return (((y + (y >> 3)) & 0xC71C71C7) % 0x3F)