{"id":4363,"date":"2019-04-15T12:06:28","date_gmt":"2019-04-15T10:06:28","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=4363"},"modified":"2019-04-15T12:06:28","modified_gmt":"2019-04-15T10:06:28","slug":"der-restwert-operator","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2019\/04\/der-restwert-operator\/","title":{"rendered":"Der Restwert-Operator %"},"content":{"rendered":"<p>Eine Ganzzahldivision muss nicht unbedingt glatt aufgehen, wie im Fall von 9\/2. In diesem Fall gibt es den Rest 1. Diesen Rest liefert der Restwert-Operator (engl. remainder operator), oft auch Modulo genannt.<a href=\"#_ftn1\" name=\"_ftnref1\">[1]<\/a> Die Operanden k\u00f6nnen auch negativ sein.<\/p>\n<p>Beispiel: System.out.println( 9 % 2 );\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ 1<\/p>\n<p>Die Division und der Restwert richten sich in Java nach einer einfachen Formel: (int)(a\/b)\u00a0\u00d7 b\u00a0+ (a%b) = a.<\/p>\n<p>Beispiel:\u00a0Die Gleichung ist erf\u00fcllt, wenn wir etwa a = 10 und b = 3 w\u00e4hlen. Es gilt: (int)(10\/3) = 3 und 10\u00a0% 3 ergibt 1. Dann ergeben 3 * 3 + 1 = 10.<\/p>\n<p>Aus dieser Gleichung folgt, dass beim Restwert das Ergebnis nur dann negativ ist, wenn der Dividend negativ ist; das Ergebnis ist nur dann positiv, wenn der Dividend positiv ist. Es ist leicht einzusehen, dass das Ergebnis der Restwert-Operation immer echt kleiner ist als der Wert des Divisors. Wir haben den gleichen Fall wie bei der Ganzzahldivision, dass ein Divisor mit dem Wert 0 eine ArithmeticException ausl\u00f6st und bei Flie\u00dfkommazahlen zum Ergebnis NaN f\u00fchrt.<\/p>\n<p>System.out.println( &#8222;+5% +3\u00a0 = &#8220; + (+5% +3) );\u00a0\u00a0 \/\/\u00a0 2<br \/>\nSystem.out.println( &#8222;+5 \/ +3 = &#8220; + (+5 \/ +3) );\u00a0 \/\/\u00a0 1<\/p>\n<p>System.out.println( &#8222;+5% -3\u00a0 = &#8220; + (+5% -3) );\u00a0\u00a0 \/\/\u00a0 2<br \/>\nSystem.out.println( &#8222;+5 \/ -3 = &#8220; + (+5 \/ -3) );\u00a0 \/\/ -1<\/p>\n<p>System.out.println( &#8222;-5% +3\u00a0 = &#8220; + (-5% +3) );\u00a0\u00a0 \/\/ -2<br \/>\nSystem.out.println( &#8222;-5 \/ +3 = &#8220; + (-5 \/ +3) );\u00a0 \/\/ -1<\/p>\n<p>System.out.println( &#8222;-5% -3\u00a0 = &#8220; + (-5% -3) );\u00a0\u00a0 \/\/ -2<br \/>\nSystem.out.println( &#8222;-5 \/ -3 = &#8220; + (-5 \/ -3) );\u00a0 \/\/\u00a0 1<\/p>\n<p>Gew\u00f6hnungsbed\u00fcrftig ist die Tatsache, dass der erste Operand (Dividend) das Vorzeichen des Restes definiert und niemals der zweite (Divisor).<\/p>\n<p>Hinweis: Um mit value % 2 == 1 zu testen, ob value eine ungerade Zahl ist, muss value positiv sein, denn -3\u00a0% 2 wertet Java zu \u20131 aus. Der Test auf ungerade Zahlen wird erst wieder korrekt mit value % 2 != 0.<\/p>\n<h4>Restwert f\u00fcr Flie\u00dfkommazahlen<\/h4>\n<p>Der Restwert-Operator ist auch auf Flie\u00dfkommazahlen anwendbar, und die Operanden k\u00f6nnen wiederum negativ sein.<\/p>\n<p>Beispiel:\u00a0Teste, ob eine double-Zahl doch eine Ganzzahl ist: (d % 1) == 0.\u00a0Wem das zu verr\u00fcckst ist, der nutzt alternativ d == Math.rint(d).<\/p>\n<h4>Restwert f\u00fcr Flie\u00dfkommazahlen und Math.IEEEremainder(\u00a0) *<\/h4>\n<p>\u00dcber die oben genannte Formel k\u00f6nnen wir auch bei Flie\u00dfkommazahlen das Ergebnis einer Restwert-Operation leicht berechnen. Dabei muss beachtet werden, dass sich der Operator nicht so wie unter\u00a0IEEE 754 verh\u00e4lt. Denn diese Norm schreibt vor, dass die Restwert-Operation den Rest von einer rundenden Division berechnet und nicht von einer abschneidenden. So w\u00e4re das Verhalten nicht analog zum Restwert bei Ganzzahlen. Java definiert den Restwert jedoch bei Flie\u00dfkommazahlen genauso wie den Restwert bei Ganzzahlen. W\u00fcnschen wir ein\u00a0Restwert-Verhalten, wie IEEE 754 es vorschreibt, so k\u00f6nnen wir die statische Bibliotheksmethode Math.IEEEremainder(\u2026)<a href=\"#_ftn2\" name=\"_ftnref2\">[2]<\/a> verwenden.<\/p>\n<p>Auch bei der Restwert-Operation bei Flie\u00dfkommazahlen werden wir niemals eine Exception erwarten. Eventuelle Fehler werden, wie im IEEE-Standard beschrieben, mit NaN angegeben. Ein \u00dcberlauf oder Unterlauf kann zwar vorkommen, aber nicht gepr\u00fcft werden.<\/p>\n<p><a href=\"#_ftnref1\" name=\"_ftn1\">[1]<\/a> Mathematiker unterscheiden die beiden Begriffe Rest und Modulo, da ein Modulo nicht negativ ist, der Rest in Java aber schon. Das soll uns aber egal sein.<\/p>\n<p><a href=\"#_ftnref2\" name=\"_ftn2\">[2]<\/a> Es gibt auch Methoden, die nicht mit Kleinbuchstaben beginnen, wobei das sehr selten ist und nur in Sonderf\u00e4llen auftritt. ieeeRemainder() sah f\u00fcr die Autoren nicht nett aus.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine Ganzzahldivision muss nicht unbedingt glatt aufgehen, wie im Fall von 9\/2. In diesem Fall gibt es den Rest 1. Diesen Rest liefert der Restwert-Operator (engl. remainder operator), oft auch Modulo genannt.[1] Die Operanden k\u00f6nnen auch negativ sein. Beispiel: System.out.println( 9 % 2 );\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ 1 Die Division und der Restwert richten sich in Java [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11],"tags":[],"class_list":["post-4363","post","type-post","status-publish","format-standard","hentry","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4363","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=4363"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4363\/revisions"}],"predecessor-version":[{"id":4367,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4363\/revisions\/4367"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=4363"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=4363"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=4363"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}