2012-04-22 9 views
4

私は整数を取っています(この場合は192)、それを24個分ずらして左にシフトします。先頭の1はそれを負にする原因です。"unsigned int"は負の数値として出力されますか?

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

私は3221225472を期待していますが、私は-1073741824(カンマは、わかりやすくするために追加された)を取得

符号なし整数は、負の権利ではないでしょうか?

答えて

17

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

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

+0

Aha。完璧な意味合いを持つ。私は私の心を失っていると思った。ありがとう! – Mike

9

あなたはNSLog(@"newnumber is %u",newnumber);

%d署名intに戻ってそれを変換を行うためにワン。

7

%dは "符号付き整数"を意味します。 「符号なし整数」には%uを使用してください。

関連する問題