1

GCC の使用:

printf("%i \n", -1 % (int)4);
printf("%u \n", -1 % (unsigned int)4);

出力:

-1
3

プラットフォーム間でこの動作に依存できますか? MODこれが変更されていないことを確認するには、REMマクロを明示的に定義する必要が ありますか?

4

3 に答える 3

1

C99 標準は次のように述べています。

6.5.5 乗法演算子

:

整数を除算すると、/演算子の結果は小数部を切り捨てた代数商になります87)。商a/bが表現可能な場合、式
(a/b)*b + a%bは a と等しくなります。

:

87) これはしばしば「ゼロへの切り捨て」と呼ばれます。</p>

これは、除算が常に 0 に向かって丸められることを意味するため、信頼できます。

これは C++03 標準とは異なることに注意してください。

2 行目は符号なし除算を行い、値-1unsigned int除算前に変換します。これは常に 2 の累乗よりも 1 少ないため、これも明確に定義されています。

于 2015-03-21T05:11:49.143 に答える
-3

モジュロ演算子 ( %) は、何年もの間、C および C++ 標準の一部でした。C++ でオーバーロードできるかどうかはわかりません。はい、あなたはそれに頼ることができます。

于 2015-03-21T04:58:28.247 に答える