これは Remainder/Mod を扱う際に最も聞かれることのようで、私はそれで壁にぶつかっています。私は教科書と C コードのチャックを使ってプログラミングを独学しています。
「いや、いや、実際こうなるんだ」と言ってくれる先生がなかなかいないので、ここでやってみようと思いました。ただし、これの数学的部分に対する決定的な答えは見つかりませんでした。
だから...これはかなりまれな出来事であるという印象を受けていますが、光沢のあるコンパイルの下で何が起こっているのかを知りたいです. さらに、この教科書では、C89 標準に従って、負の剰余を使用する場合に可能なすべての値を提供してほしいと考えています。誰かがこの数学が正しいかどうかを確認できるかどうかを尋ねるのは大変でしょうか?
1) 9%4
9 - (2) * 4 = 1 //this is a value based on x - (x/y) * y
(2) * 4 + (1) = 9 //this is a check based on (x/y) * y + (x%y) = x
2) -9%4
9 - (2) * 4 = 1; 9 - (3) * 4 = -3 //these are the possible values
(2) * 4 + (1) = 9; (3) * 4 + (-3) = 9 //these are the checks
3) 9%-4
Same values as #2??
式にマイナスを入れて計算してみたところ、17 や -33 などとんでもないものが出てきました。#3 も 1 と -3 ですか??
4) -9%-4
Same as #1??
代数除算では、マイナス記号は「キャンセル」します。彼らはここでも同じことをしていますか、それとも何か他のことが起こっていますか?
私を最も混乱させるのはネガだと思います。私が学校で代数を学んだ方法 (5 ~ 6 年前) では、代数はその数に「執着」しています。プログラミングでは単項演算子なので、そうではありませんか?例: #2 の x の値を入力する場合、x = -9 ではなく x = 9 となります。
どんな助けにも心から感謝します。