def _toTwosComplement()

in rtl/log/luts/FixedPoint.py [0:0]


    def _toTwosComplement(self, logBase=1):
        """Convert binary representation to twos-complement for printing.

        This will convert negative numbers into their twos-complement form,
        and automatically guess the number of digits required to represent
        the integer part of the invoking number. The returned bit-pattern
        is aligned so that it has a whole number of digits (in base 1<<logBase)
        both before and after the binary/octal/hexadecimal-point.
        """
        fracDigits = (self.family.resolution + logBase - 1) // logBase
        bitPattern = self.scaledval

        if self.family.integer_bits is not None:
            intDigits = (self.family.integer_bits + logBase - 1) // logBase
        else:
            intDigits = 1
            intPart = self.scaledval >> self.family.resolution
            if intPart >= 0:
                while intPart >= (1 << (intDigits * logBase)):
                    intDigits += 1
            else:
                while (1 << (intDigits * logBase - 1)) + intPart < 0:
                    intDigits += 1

        if bitPattern < 0:
            bitPattern += 1 << (intDigits * logBase + self.family.resolution)

        bitPattern <<= (fracDigits * logBase - self.family.resolution)

        return (bitPattern, intDigits, fracDigits)