Variable ausgeben



  • Hey,

    ich habe ein kleines Problem.

    Wenn ich eine Variable ausgeben möchte geht dies ja so problemlos

    [code="c"]#include <stdio.h>

    void main()
    {
    double i = 0001011010101001;

    printf("%lf", i);

    }
    [code]

    So meine Frage jetzt, kann ich auch nur eine Ausgabe von einem Teil des doubles ausgeben? Sprich ich möchte immer genau vier Zahlen ausgeben. (von hinten angefangen)

    Sprich die Ausgabe wäre dann nach der Reihenfolge

    "Die ersten 4 Zahlen: 1001"
    "Die zweiten 4 Zahlen: 1010"
    "Die dritten 4 Zahlen: 0110"
    "Die letzten 4 Zahlen: 0001"

    Wie kann ich solch eine Ausgabe machen?
    Danke schonmal 🙂


  • Mod

    Der Formatspezifizierer für doubles bei printf ist %f, nicht %lf (wobei das 'l' aber ab C99 offiziell ignoriert wird). So einfach ist das mit der Ausgabe also nicht 😃 . Außerdem: Hast du dein Beispielprogramm mal ausprobiert? Ich denke, die Ausgabe dürfte dich ziemlich überraschen.

    Zum eigentlichen Problem zwei Ansätze:
    1. Mathematik. Du suchst die Ziffern N bis M der Dezimaldarstellung einer Zahl. Denk mal an deine Grundschulzeit und überleg dir, wie du diese bekommst.
    2. Zeichenkettenmanipulation. Anstatt mit den Zahlenwerten rum zu spielen, gibst du dir die dezimale Darstellung in eine Zeichenkette aus (z.B. mit sprintf) und arbeitest mit dieser. Die Zeichen N bis M einer Zeichenkette auszugeben, ist ziemlich trivial.

    Die Art, wie du dein Zahlenliteral im Programm stehen hast (führende Nullen) lässt mich vermuten, dass die zweite Methode wohl eher etwas für dich ist. Ich würde sogar sagen, dass du den double zwischendrin gar nicht haben willst. Die arithmetischen Datentypen speichern den Wert einer Zahl, nicht ihre Darstellung! Du scheinst in deiner Denkweise jedoch sehr an Darstellungen zu hängen.



  • Code:

    #include <stdio.h>
    
    int main()
    {
    double i = 0001011010101001, j = 1011010101001;
    
    printf("i=%f j=%f", i,j);
    return 0;
    }
    

    Ausgabe:

    i=69929566721.000000 j=1011010101001.000000
    

    Das begreift mein Hirn nicht.....



  • Ganzzahlige Zahlenliterale, die mit 0 anfangen, werden im Oktalsystem interpretiert. Beispiel: 010 == 8, 045 = 4*8 + 5 = 37 usw.



  • Bashar schrieb:

    Ganzzahlige Zahlenliterale, die mit 0 anfangen, werden im Oktalsystem interpretiert. Beispiel: 010 == 8, 045 = 4*8 + 5 = 37 usw.

    Danke!

    aus Wiki:

    Oktalzahlen werden häufig durch ein nachgestelltes o gekennzeichnet (auch bekannt als Intel-Konvention).
    In den Programmiersprachen C, Java und Python (Versionen bis 2.x) wird eine 0 (Null) vorangestellt,
    um eine Oktalzahl von einer Dezimalzahl zu unterscheiden (was zu schwer zu entdeckenden Flüchtigkeitsfehlern führen kann:
    0715 ist ungleich 715). Bei Python 3000 wird zur besseren Unterscheidung eine Null und ein o vorangestellt (z.B. 0o715).
    In TeX wird eine Oktalzahl durch ein vorangestelltes Hochkomma gekennzeichnet.

    Nach Motorola-Konvention werden Oktalzahlen hingegen mit einem vorangestellten @-Zeichen gekennzeichnet (z.B. @715).
    Unter DR-DOS unterstützt DEBUG Oktalzahlen in Verbindung mit dem Präfix \ (z.B. \715).

    In der Mathematik wird oft auch die Basis des Zahlensystems an die Zahl angefügt, z.B. 172(8) = 122(10).
    Beispiel: 172o = 172(8) (Mathematik) = 0172 (in C oder Java) = '172 (TeX).

    Ich hätte mir jetzt eher gedacht, die Kennung ist "0o" analog "0x" resp "0b".
    Naja....


Log in to reply