-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);
}

为什么这个打印像我的变量是有符号的 int ?我怎样才能拥有我想要的价值 222 ?

十分感谢!

4

1 回答 1

0

该标准没有指定默认情况下 char 是有符号还是无符号。因此,这是依赖于实现的,并且在您的机器上它似乎已签名,并且 '\336' 在这种情况下值为 -34。

为了达到您的期望,您必须:

  1. 将 c 定义为无符号字符
  2. 在 printf 中使用 %u 说明符。

有关进一步的解释,您可以在这里查看:默认情况下是 char 有符号还是无符号?

于 2013-11-15T17:09:13.487 回答