ページ 11

整数の割り算について

Posted: 2009年5月06日(水) 14:06
by tuka
以下のソースコードのようにsignedの整数値をunsignedの整数値で割ると演算結果がおかしくなりました。

例:
int a = -13;
unsigned int b = 22680;
int c = a / b;
とするとcの値が0にならない。

bの変数をsignedにすれば正しく計算されるのですが、なぜunsignedで割ると値がおかしくなるのでしょうか?
またできればunsignedで割りたいのですがよい回避策をご存知の方はいませんか?
環境はMicrosoft社のVisual Studioシリーズ OSはWindows XPです。

よろしくお願いします。

Re:整数の割り算について

Posted: 2009年5月06日(水) 14:12
by たかぎ
> なぜunsignedで割ると値がおかしくなるのでしょうか?

「通常の算術型変換」によって、除算演算子の一方のオペランドがsigned、他方がunsignedである場合、signed側が暗黙的にunsignedに型変換されるからです。

> またできればunsignedで割りたいのですがよい回避策をご存知の方はいませんか?

unsignedで割った結果、どのようになることを期待していますか?

Re:整数の割り算について

Posted: 2009年5月06日(水) 14:31
by tuka
解説ありがとうございます。

符号付き整数を符号なし整数で割るのだから結果は符号付きだと思っていましたが、
unsignedが優先されてしまうのですね。
納得しました。