Nächste Vielfache von 8 ohne Kontrollstruktur berechnen?



  • alles klar dankeschön:)



  • fubar schrieb:

    int x = (Zahl+7) - (Zahl+7)%8;
    //oder
    int x = ((Zahl+7)/8)*8;
    

    Berechnen beide das nächstgrößere Vielfache von 8 (das war doch das Problem, oder sehe ich das falsch?)

    ich glaube die formel funzt nicht wenn Zahl = 0 ist...



  • stimmt ja.

    Wenn wir gerade mal dabei sind. was bedeutet IrgendeineZahl & 0x7fff wäre sicher ne frage für bitsy



  • SpaceMonkey schrieb:

    stimmt ja.

    Wenn wir gerade mal dabei sind. was bedeutet IrgendeineZahl & 0x7fff wäre sicher ne frage für bitsy

    bitmaske



  • bitmaske? ah ja eh klar!!!!



  • dies hier funzt auch mit einer 0-eingabe:

    #include <stdio.h>
    #define GESUCHTE_ZAHL 8 
    
    int main (void){
      int i ;
      scanf ("%d",&i) ;  
      printf ("%d\n", i|0x0?((i+GESUCHTE_ZAHL-1)>>3)<<3:GESUCHTE_ZAHL) ; 
      return 0 ;
    }
    


  • das i|0x0 was immer es auch macht braucht es gar nicht:

    printf ("\n%d\n", i?((i+GESUCHTE_ZAHL-1)>>3)<<3:GESUCHTE_ZAHL);
    könnte mir jemand mal ein paar bitoperatoren wie >> << | & erklären?

    Danke im voraus.



  • SpaceMonkey schrieb:

    das i|0x0 was immer es auch macht braucht es gar nicht

    du brauchst es um die 0-eingabe zu berechnen. sonst ist bei einer 0-eingabe die ausgabe = 0.



  • SpaceMonkey schrieb:

    könnte mir jemand mal ein paar bitoperatoren wie >> << | & erklären?

    bsp. sagen wir du hast eine zahl: dezimal 27 = 00011011 binär.
    mit den >> operatoren verschiebst du die bits nach rechts, und mit << nach links. Also:
    00011011 >> 3 = 00000011

    genauso andersrum:

    unsere zahl 27 = 00011011
    00011011 << 3 = 11011000

    verstanden?



  • ja das >> << hab ich verstanden da gibts aber noch das & |.
    i|0x0 braucht es meiner Meinung nach immer noch nicht. egal was für eine zahl eingegeben wird i|0x0 ist die eingegebene zahl. eingabe=0 -> i|0x0=0 bei eingabe 0 ist die ausgabe nicht null da ja GESUCHTE_ZAHL 8 ist.

    Hoffe hab alles schon richtig verstanden



  • Das & verknüpft bitweise mit der logischen Funktion AND

    0011
    0101
    ----
    0001 (nur dort 1, wo beide Bits 1 sind)

    Das | verknüpft bitweise mit der logischen Funktion OR

    0011
    0101
    ----
    0111 (nur dort 0, wo beide Bits 0 sind)

    Ich nutze eine solche Operation mit einer 'Maske', wenn ich in einer
    Variablen gezielt Bits setzen oder löschen möchte.
    In unserem Fall wollte ich den Restanteil 0...7 löschen, und der findet sich exakt im Bereich der letzten drei Bits. Also filtere ich die einfach weg.

    Und zu der Sache mit der 0: die ist durch 8 teilbar.
    Bei 8 wird auch 8 genommen, insofern verletzen wir vielleicht die Forderung der 'nächstmöglichen' Zahl. Dann halt +8 nehmen, statt +7.



  • ganz interessant. dankeschön


Anmelden zum Antworten