[Lldb-commits] [lldb] r143173 - in /lldb/trunk/examples/customization/bin-utils: ./ binutils.py

Johnny Chen johnny.chen at apple.com
Thu Oct 27 18:09:53 PDT 2011


Author: johnny
Date: Thu Oct 27 20:09:53 2011
New Revision: 143173

URL: http://llvm.org/viewvc/llvm-project?rev=143173&view=rev
Log:
Add a binutils.py which contains Python functions for displaying bit representation of numbers.

Added:
    lldb/trunk/examples/customization/bin-utils/
    lldb/trunk/examples/customization/bin-utils/binutils.py

Added: lldb/trunk/examples/customization/bin-utils/binutils.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/customization/bin-utils/binutils.py?rev=143173&view=auto
==============================================================================
--- lldb/trunk/examples/customization/bin-utils/binutils.py (added)
+++ lldb/trunk/examples/customization/bin-utils/binutils.py Thu Oct 27 20:09:53 2011
@@ -0,0 +1,53 @@
+"Collection of tools for displaying bit representation of numbers."""
+
+def binary(n, width=None):
+    """
+    Return a list of (0|1)'s for the binary representation of n where n >= 0.
+    If you specify a width, it must be > 0, otherwise it is ignored.  The list
+    could be padded with 0 bits if width is specified.
+    """
+    l = []
+    if width and width <= 0:
+        width = None
+    while n > 0:
+        l.append(1 if n&1 else 0)
+        n = n >> 1
+
+    if width:
+        for i in range(width - len(l)):
+            l.append(0)
+
+    l.reverse()
+    return l
+
+def twos_complement(n, width):
+    """
+    Return a list of (0|1)'s for the binary representation of a width-bit two's
+    complement numeral system of an integer n which may be negative.
+    """
+    val = 2**(width-1)
+    if n >= 0:
+        if n > (val-1):
+            return None
+        # It is safe to represent n with width-bits.
+        return binary(n, width)
+
+    if n < 0:
+        if abs(n) > val:
+            return None
+        # It is safe to represent n (a negative int) with width-bits.
+        return binary(val*2 - abs(n))
+
+# print binary(0xABCD)
+# [1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1]
+# print binary(0x1F, 8)
+# [0, 0, 0, 1, 1, 1, 1, 1]
+# print twos_complement(-5, 4)
+# [1, 0, 1, 1]
+# print twos_complement(7, 4)
+# [0, 1, 1, 1]
+# print binary(7)
+# [1, 1, 1]
+# print twos_complement(-5, 64)
+# [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]
+





More information about the lldb-commits mailing list