Like built-in bin(), except negative values are represented in twos-compliment, and the leading bit always indicates sign (0=positive, 1=negative). >>> bin(10) '0b0 1010' >>> bin(~10) # ~10 is -11 '0b1 0101'
(num, max_bits=None)
| 130 | return list(_iter_bits_lsb(value)) |
| 131 | |
| 132 | def bin(num, max_bits=None): |
| 133 | """ |
| 134 | Like built-in bin(), except negative values are represented in |
| 135 | twos-compliment, and the leading bit always indicates sign |
| 136 | (0=positive, 1=negative). |
| 137 | |
| 138 | >>> bin(10) |
| 139 | '0b0 1010' |
| 140 | >>> bin(~10) # ~10 is -11 |
| 141 | '0b1 0101' |
| 142 | """ |
| 143 | |
| 144 | ceiling = 2 ** (num).bit_length() |
| 145 | if num >= 0: |
| 146 | s = bltns.bin(num + ceiling).replace('1', '0', 1) |
| 147 | else: |
| 148 | s = bltns.bin(~num ^ (ceiling - 1) + ceiling) |
| 149 | sign = s[:3] |
| 150 | digits = s[3:] |
| 151 | if max_bits is not None: |
| 152 | if len(digits) < max_bits: |
| 153 | digits = (sign[-1] * max_bits + digits)[-max_bits:] |
| 154 | return "%s %s" % (sign, digits) |
| 155 | |
| 156 | def _dedent(text): |
| 157 | """ |