C(++) の unsigned の罠
ループカウンタや、個数など、負の値が必要ない場合、 usigned int
を使用すると思う。単に unsigned
と書けば、 unsigned int
の省略形。
で、 C では計算の際に異なる型が混じると、自動的に変換したりするややこしめのルールがあるが、なかでも unsigned
に関するルール(汎整数変換)には注意が必要。
unsigned int
と signed int
の計算は、自動的に signed int
が unsigned int
に変換されてしまう。
というわけで、意図せず、不本意にも、符号が勝手にプラスになってしまい、警告も出ないのでバグがなかなか見つからないという罠に陥る。
…かってに符号変えるなよ。とか思ったり。