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 = 00000011genauso andersrum:
unsere zahl 27 = 00011011
00011011 << 3 = 11011000verstanden?
-
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