5
4

2 に答える 2

8

%ldNSLog符号付き整数として出力するように指示します。試してみてください%lu

ビットレベルで何が起こっているかの説明については、ウィキペディアの2の補数を参照してください。

ここで起こっていることは、減算が符号なし整数表現をラップアラウンドさせているということです。これを防ぐには、減算を行う前に確認する必要があります。

NSUInteger x = 5; 
NSUInteger y = 55;

// If 0 makes sense in your case
NSUInteger result = (x >= y) ? (x - y) : 0; 

// If it should be an error
if(x < y)
{
    // Report error
}
于 2012-08-02T05:50:47.240 に答える
0

本当の答えは、ビットがどのように解釈されているかです。確かに、2の補数を介して内部でどのように行われるかを理解することは重要ですが、%ldを使用すると負の数が表示され、%を使用すると正の数とは多少異なると考えると混乱が生じるようです。 lu。どちらの場合も同じビットを使用しており、それは単にそれらがどのように解釈されているかの関数です。これらの同じビットを文字のシーケンスとして解釈しようとすると、異なる結果が得られます。

于 2015-09-04T19:26:47.027 に答える