DOSEIの日記

技術メモ+日常ログ

C(++) の unsigned の罠

ループカウンタや、個数など、負の値が必要ない場合、 usigned int を使用すると思う。単に unsigned と書けば、 unsigned int の省略形。

で、 C では計算の際に異なる型が混じると、自動的に変換したりするややこしめのルールがあるが、なかでも unsigned に関するルール(汎整数変換)には注意が必要。
unsigned intsigned int の計算は、自動的に signed intunsigned int に変換されてしまう。
というわけで、意図せず、不本意にも、符号が勝手にプラスになってしまい、警告も出ないのでバグがなかなか見つからないという罠に陥る。

…かってに符号変えるなよ。とか思ったり。