C/C++ において、signed int
が使用できる場所で無理に unsigned int
を使おうとすると、思わぬ落とし穴にはまることがあります。
int iVal = -1;
unsigned int uiVal = 1;
cout << iVal / uiVal << std;
4294967295 (-1 ではない!)
unsigned int uiVal = 1;
cout << -uiVal << endl;
4294967295 (-1 ではない!)
要するに、計算結果が負の値になる可能性のある整数同士の計算式で unsigned int
の変数を使ってはいけないということです。
ちなみに、非演算子の型のどちらかが float
や double
になっていれば、上記のような符号の問題は起こりません。
この辺りの細かい話は、C++ 言語を作ったストラウストラップの著書「プログラミング言語 C++」の算術変換の項を参照するとよくわかります。
プログラミング言語C++第4版 C++11対応 [ ビャーン・ストラウストラップ ] | |