navigation Navigation


Inhaltsverzeichnis

bin()


Die Python-Funktion bin() ist eine eingebaute Funktion, die Ganzzahlen in ihre binäre Darstellung als Zeichenkette umwandelt. Sie liefert das Ergebnis als String mit dem Präfix 0b, das die Binärform kennzeichnet. Diese Funktion ist besonders nützlich bei Aufgaben, die bitweise Operationen, Datenanalyse oder die Visualisierung von Binärdaten erfordern. Mit ihrer einfachen Syntax erleichtert bin() die Arbeit mit binären Zahlen in Python und unterstützt die effiziente Umsetzung zahlreicher Programmieraufgaben.

Inhaltsverzeichnis

    Einführung

    Die bin() Funktion ist eine eingebaute Funktion in Python, die zur Konvertierung von Ganzzahlen in ihre binäre Darstellung verwendet wird. Sie konvertiert eine Ganzzahl in eine binäre Darstellung.

    Syntax

    Syntax
    bin(x)
    x

    Eine Ganzzahl, die konvertiert werden soll. Es muss eine Ganzzahl sein. Sie kann dabei positiv, negativ oder null sein.


    Rückgabewert

    Typ: str (String)

    Format des Rückgabewerts:

    • Positive Zahlen: '0b' + binäre_darstellung
    • Negative Zahlen: '-0b' + binäre_darstellung_des_absolutwerts
    • Null: 0b0

    Besonderheiten

    Umgang mit negativen Zahlen

    Negative Zahlen werden nicht im Zweierkomplement dargestellt. Stattdessen wird das Minuszeichen vor das 0b Präfix gesetzt. Dies unterscheidet sich von der internen Speicherrepräsentation.


    Präfix-Handling

    • Das 0b Präfix ist immer Teil des Rückgabewerts
    • Zum Entfernen des Präfixes kann String-Slicing verwendet werden. bin(x)[2:]

    Typ-Konvertierung

    • Funktioniert nur mit int Objekten
    • Für andere Typen muss zuerst eine Konvertierung zu int erfolgen

    Beispiele

    Grundlegende Verwendung mit positiven Zahlen

    Kurz-Informationen

    • 0 in binär ist 0b0 (nur eine Null)
    • 1 in binär ist 0b1 (entspricht sich selbst)
    • 8 in binär ist 0b1000 (2³ = 8, also 1 and der 4. Stelle)
    • 255 in binär ist 0b11111111 (2⁸ - 1, alle 8 Bits gesetzt)
    Beispiel
    res_one = bin(0)
    res_two = bin(1)
    res_three = bin(8)
    res_four = bin(255)
    
    print(f"bin(0) = {res_one}")
    print(f"bin(1) = {res_two}")
    print(f"bin(8) = {res_three}")
    print(f"bin(255) = {res_four}")
    bin(0) = 0b0
    bin(1) = 0b1
    bin(8) = 0b1000
    bin(255) = 0b11111111

    Negative Zahlen

    Negative Zahlen erhalten ein Minuszeichen vor dem 0b Präfix. Die binäre Darstellung entspricht dem Absolutwert der Zahl. Dies ist nicht die Zweierkomplement-Darstellung, die Computer intern verwenden.

    Beispiel
    negative_examples = [-1, -8, -255]
    
    for num in negative_examples:
        bin_repr = bin(num)
        print(f"bin({num}) = {bin_repr}")
    bin(-1) = -0b1
    bin(-8) = -0b1000
    bin(-255) = -0b11111111

    Präfix entfernen

    Man kann den Präfix entfernen, wenn man Werte ohne diesen benötigt.

    Beispiel
    numbers = [42, 100, 1024]
    
    for num in numbers:
        with_prefix = bin(num)
        without_prefix = bin(num)[2:]
    
        print(f"Zahl: {num}")
        print(f"  Mit Präfix: {with_prefix}")
        print(f"  Ohne Präfix: {without_prefix}")
        print()
    Zahl: 42
    Mit Präfix: 0b101010
    Ohne Präfix: 101010
    
    Zahl: 100
    Mit Präfix: 0b1100100
    Ohne Präfix: 1100100
    
    Zahl: 1024
    Mit Präfix: 0b10000000000
    Ohne Präfix: 10000000000

    Bit-Länge und Analyse

    Man mit Hilfe von bin() die Bit-Länge ermitteln bzw. errechnen, wie viele Bits zur Darstellung benötigt werden.

    Beispiel - Bit-Länge
    def analyze_binary(num):
        binary_str = bin(num)
        pure_binary = binary_str[2:] if num >= 0 else binary_str[3:]
        bit_length = len(pure_binary)
    
        print(f"Dezimal: {num}")
        print(f"Binär: {binary_str}")
        print(f"Bit-Länge: {bit_length}")
        print(f"Benötigte Potenz von 2: 2^{bit_length - 1} bis 2^{bit_length}-1)")
        print("-" * 40)
    
    test_numbers = [1, 2, 4, 7, 15]
    
    for num in test_numbers:
        analyze_binary(num)
    Dezimal: 1
    Binär: 0b1
    Bit-Länge: 1
    Benötigte Potenz von 2: 2^0 bis 2^1-1
    ----------------------------------------
    Dezimal: 2
    Binär: 0b10
    Bit-Länge: 2
    Benötigte Potenz von 2: 2^1 bis 2^2-1
    ----------------------------------------
    Dezimal: 4
    Binär: 0b100
    Bit-Länge: 3
    Benötigte Potenz von 2: 2^2 bis 2^3-1
    ----------------------------------------
    Dezimal: 7
    Binär: 0b111
    Bit-Länge: 3
    Benötigte Potenz von 2: 2^2 bis 2^3-1
    ----------------------------------------
    Dezimal: 15
    Binär: 0b1111
    Bit-Länge: 4
    Benötigte Potenz von 2: 2^3 bis 2^4-1
    ----------------------------------------

    Berechtigungssystem

    Das nachfolgende Beispiel, zeigt eine beispielhafte Anwendung für Anzeige von Berechtigungen.

    Beispiel - Berechtigungen
    def show_permissions(permission_code):
        binary_repr = bin(permission_code)[2:].zfill(9)
    
        permissions = []
    
        for i in range(0, 9, 3):
            group = binary_repr[i:i+3]
            perm = ""
            perm += "r" if group[0] == "1" else "-"
            perm += "w" if group[1] == "1" else "-"
            perm += "x" if group[2] == "1" else "-"
            permissions.append(perm)
    
        print(f"Berechtigung {permission_code} (binär: {binary_repr})")
        print(f"Owner: {permissions[0]}, Group: {permissions[1]}, Others: {permissions[2]}")
    
    
    # Beispiele für Berechtigungen
    show_permissions(0b111101100)
    show_permissions(0b111111111)
    show_permissions(0b110100100)
    Berechtigung 492 (binär: 111101100)
    Owner: rwx, Group: r-x, Others: r--
    Berechtigung 511 (binär: 111111111)
    Owner: rwx, Group: rwx, Others: rwx
    Berechtigung 420 (binär: 110100100)
    Owner: rw-, Group: r--, Others: r--

    Bit-Flags für Konfiguration

    Beispiel - Bit-Flags
    class FeatureFlags:
        
        FEATURE_A = 1   # 0b0001
        FEATURE_B = 2   # 0b0010
        FEATURE_C = 4   # 0b0100
        FEATURE_D = 8   # 0b1000
    
        def __init__(self, flags=0):
            self.flags = flags
    
        def enable_feature(self, feature):
            self.flags |= feature
    
        def disable_feature(self, feature):
            self.flags &= ~feature
    
        def is_enabled(self, feature):
            return bool(self.flags & feature)
    
        def show_status(self):
            print(f"Aktueller Status (binär: {bin(self.flags)})")
    
            features = [
                (self.FEATURE_A, "Feature A"),
                (self.FEATURE_B, "Feature B"),
                (self.FEATURE_C, "Feature C"),
                (self.FEATURE_D, "Feature D"),
            ]
    
            for flag, name in features:
                status = "AN" if self.is_enabled(flag) else "AUS"
                print(f"   {name}: {status}")
    
    
    config = FeatureFlags()
    config.show_status()
    
    print("\nAktiviere Feature A und C:")
    config.enable_feature(FeatureFlags.FEATURE_A)
    config.enable_feature(FeatureFlags.FEATURE_C)
    config.show_status()
    
    print("\nDeaktiviere Feature A:")
    config.disable_feature(FeatureFlags.FEATURE_A)
    config.show_status()
    Aktueller Status (binär: 0b0)
    Feature A: AUS
    Feature B: AUS
    Feature C: AUS
    Feature D: AUS
    
    Aktiviere Feature A und C:
    Aktueller Status (binär: 0b101)
    Feature A: AN
    Feature B: AUS
    Feature C: AN
    Feature D: AUS
    
    Deaktiviere Feature A:
    Aktueller Status (binär: 0b100)
    Feature A: AUS
    Feature B: AUS
    Feature C: AN
    Feature D: AUS