2009-03-14 6 views
0

Iは負の値を含む、いくつかの計算を持っている:分裂およびNSUInteger

row = (stagePosition - col)/PHNumRow; 

セイstagePositionは-7とCOLは、彼らは両方の行を含むNSInteger、ある1です。 PHNumRowが8です。

PHNumRowがNSIntegerなら、私は期待した結果を得ます:-1。 しかし、PHNumRowがNSUIntegerの場合、結果はガベージです。

除数が署名されていないか、署名されているのはなぜ重要ですか? 私は結果を符号なしintに入れません。

答えて

4

整数昇格のためです。右辺が評価されるとき、すべての引数は式のオペランドの最も高い型に昇格され、PHNumRowが符号なしであれば、符号なし整数になります。 、以来

((NSUInteger)stagePosition - (NSUInteger)col)/PHNumRow; 

stagePositionがラップアラウンドがあり、あなたの計算がブームになり、負です:コンパイラは、次のような何かをします!

+0

ありがとうございました。私は無署名の無差別に使うのは良い考えではないと思います。 – hyn

関連する問題