整数の割り算について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tuka

整数の割り算について

#1

投稿記事 by tuka » 16年前

以下のソースコードのように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:整数の割り算について

#2

投稿記事 by たかぎ » 16年前

> なぜunsignedで割ると値がおかしくなるのでしょうか?

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

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

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

tuka

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

#3

投稿記事 by tuka » 16年前

解説ありがとうございます。

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

閉鎖

“C言語何でも質問掲示板” へ戻る