5

ここでは整数 (この場合は 192) を取り、24 スペース左にシフトしています。先頭の 1 がマイナスになっているようです。

unsigned int i = 192;
unsigned int newnumber = i << 24;
NSLog(@"newnumber is %d",newnumber);

私は 3,221,225,472 を期待していますが、-1,073,741,824 を取得します (わかりやすくするためにコンマを追加しました)

符号なし整数は負であってはなりませんか?

4

3 に答える 3

17

符号付き整数として再解釈するためです。符号なしの値を表示するためにNSLog使用する必要があります。%u

可変数の引数を持つ関数が、渡す値の型を確実に知る方法はありません。そのためNSLog、渡されたパラメーターの数とその型を知るために書式文字列に依存しています。対応する書式指定子と一致しない型を渡すと、 はNSLogその指定子を信頼し、それに従ってデータを解釈します。最新のコンパイラは、それについて警告することさえあります。

于 2012-04-22T23:24:38.563 に答える
10

あなたはしたいですNSLog(@"newnumber is %u",newnumber);

%dそれを符号付き int に変換します。

于 2012-04-22T23:24:35.400 に答える
7

%d「符号付き整数」を意味します。%u「符号なし整数」に使用します。

于 2012-04-22T23:25:04.753 に答える