-1

この小さな main の出力がわかりません:

 int main(int argc, char **argv) {
     char c = '\336';
     unsigned int u = (unsigned int) c;
     printf("%d\n",u); /* I'm waiting for 222  but no ...*/
     exit(EXIT_SUCCESS);
}

私の変数が signed int のように表示されるのはなぜですか? 必要な値 222 を取得するにはどうすればよいですか?

本当にありがとうございました!

4

1 に答える 1

0

標準では、デフォルトで char が符号付きか符号なしかを指定していません。したがって、これは実装に依存し、あなたのマシンでは署名されているように見えます.'\336' はこの場合の値 -34 です.

期待どおりの結果を得るには、次のことを行う必要があります。

  1. c を unisgned char として定義する
  2. printf で %u 指定子を使用します。

詳細な説明については、こちらをご覧ください: Is char signed or unsigned by default?

于 2013-11-15T17:09:13.487 に答える