Rechtsshift bzw. Linksshift



  • Hallo zusammen,

    ich brauche eure Hilfe. Und zwar soll mein Programm zwei Integer Zahlen als Eingabe erhalten. (x und p, wobei p zwischen 0 und 31 liegen muss). Das Programm soll dann mit return das Bit an der Stelle "p" zurückgeben, also 1 oder 0.

    Hier mal mein Code. Da er mir bei "1" immer "-1" zurückgibt, habe ich das ganze im Moment mit einer If Funktion gelöst. Daher die Frage, warum gibt er mir "-1" zurück, obwohl eig "1" da steht?

    Zur Erklärung, ich verschiebe zunächst die ganzen Zahlen nach links und dann später wieder komplett nach rechts, sodass nur noch das gesuchte Bit da steht.

    int main()
    {
        int x, p, bit;
        printf("Bitte geben Sie zunaechst eine ganze Zahl ein:");
        scanf("%d", &x);
        printf("Nun eine Zahl zwischen 0 und 31:");
        scanf("%d", &p);
    
        bit = x << (32-p);
        bit = bit >> 31;
        if(bit == -1) bit = 1;
        return bit;
    
        }
    

  • Mod

    Das ist doch falsch rum gedacht, wie soll das funktionieren? Wenn du erst nach links shiftest, dann wandert das gesuchte Bit wer weiß wo hin. Schreib dir doch mal ein Beispiel auf Papier hin, wie das gehen könnte. Die Zahlen sind dabei in einem Stellenwertsystem zu verstehen in dem die höherwertigen Stellen links stehen.
    Tipp: Du brauchst nicht unbedingt beide Operationen.

    edit: Ach du verschiebst um 32-p nach links. Ok, das ist eine brauchbare Idee. Dumemrweise geht ein int (in der Regel) aber nur bis 2^31, danach gibt's einen Überlauf. Du bist also schon nahe dran. Vielleicht ist es einfacher, erst einmal mit unsigned int zu rechnen.



  • ach okay ich habs;

    bit = x << (31-p);
        bit = bit >> 30;
        return bit;
    

    danke.

    nun noch eine weitere frage. Ich habe nun diese programm und noch ein anderes in zwei funktionen geschrieben. die zwei funktionen rufe ich in der main nun auf. es gibt mir nun aber nur einen rückgabewert aus. sprich den der 2. funktion.

    Kann ich mir auch beide rückgabewerte in der main anzeigen lassen? Oder gibt es nur einen Rückgabewert pro Main??(davon gehe ich aus) Wie schaffe ich es dann, dass beide RÜckgabewerte angegeben werden?

    #include <stdio.h>
    #include <stdlib.h>
    int ptebit(){
        int x, p, bit;
        printf("Bitte geben Sie zunaechst eine ganze Zahl ein:");
        scanf("%d", &x);
        printf("Nun eine Zahl zwischen 0 und 31:");
        scanf("%d", &p);
    
        bit = x << (31-p);
        bit = bit >> 30;
        return bit;
    
    }
    
    int nulltest(){
        int a, b, c;
        printf("Bitte geben Sie nun drei Zahlen ein:");
        scanf("%d", &a);
        scanf("%d", &b);
        scanf("%d", &c);
    
        if (a == 0 & b == 0 & c == 0)return 0;
        else return 1;
    
    }
    
    int main()
    {
        ptebit();
        nulltest();
    
        }
    


  • Wie wärs mit printf?

    Du brauchst die Rückgabewerte auch keiner Variablen zuweisen, du kannst die Funktionen auch direkt als Paramter von printf nehmen.


Anmelden zum Antworten