1

このようなCGFloatを使用して文字列を取得しようとしています..

helpMessage = [NSString stringWithFormat:@"The unsigned integer value is %i", (unsigned int)myCGFloat];

これは機能したくありません。-2 の CGFloat 値を指定すると、文字列で 0 を取得しています。

私が使うと...

helpMessage = [NSString stringWithFormat:@"The unsigned integer value is %i", (int)myCGFloat];

-2 を取得します。それが近づいています。@u を書式指定子として使用できると思ったのですが、4294967294 になってしまいました。

私は何を間違っていますか。

助けてくれてありがとう。これは簡単なはずです。

ジョン

4

3 に答える 3

3

4294967294値を に変換した後unsigned int、 の負性を表すために使用できるビットがない-2ため、値が 2 で「アンダーフロー」するため、いわば次のようになります。

0
4294967295 (-1)
4294967294 (-2)

%i負の値を表示する場合は、符号付き整数 ( ) としてフォーマットする必要があります。符号付き 32 ビット整数の範囲は-21474836482147483647であり、符号なし 32 ビット整数の範囲は04294967295です。

于 2010-12-04T21:31:21.683 に答える
1

Ok。答えてくれてありがとう、私はそれを理解しました...

helpMessage = [NSString stringWithFormat:@"The abasolute value is %i", abs((int)myCGFloat]);

CGFloat で abs を直接試してみましたが、abs が int 値を期待していることがわかります。unsigned int は絶対値と同じだと思っていました。私をまっすぐにしてくれてありがとう。

ジョン

于 2010-12-05T00:58:42.800 に答える
1

-2 を unsigned int にキャストしようとしていますか? unsigned int は 0 未満にはなりません。したがって、正しく表現されません。

于 2010-12-04T21:27:03.367 に答える