C,帮助我理解这个ASCII问题

时间:2016-11-16 19:32:35

标签: c ascii

此代码将打印:

  

s = 1,i = 65537,f = 65537.000000,c = 1

我需要帮助才能理解为什么打印c = 1。

代码:

#include <stdio.h>  // Standard input-output library
#include <stdlib.h> // Standard general utilities library

int main(void) {
   int i = 65537;
   unsigned short s = (unsigned short)i;
   float f = (float)i;
   char c = (char)i;
   printf("s = %u, i = %d, f = %f, c = %d\n", s,i,f,c);
   system("PAUSE");
   return (0);
}

1 个答案:

答案 0 :(得分:1)

如果以十六进制表示形式输出变量i,就像这样

#include <stdio.h>

int main(void) 
{
    int i = 65537;

    printf( "%#0x\n", i );

    return 0;
}

然后你会看到它看起来像

0x10001

类型char总是占用一个字节。因此在这个任务中

char c = (char)i;

对象的一个​​字节i

0x10001
     ^^

存储在变量c中。

在程序中的printf语句中

printf("s = %u, i = %d, f = %f, c = %d\n", s,i,f,c);
                                ^^^^^^

使用类型说明符%d输出。所以它的内部值输出为int类型的整数。

通常,unsigned short类型的对象占用两个字节。因此在这个任务中

unsigned short s = (unsigned short)i;

对象i的前两个字节中的值

0x10001
   ^^^^

将分配给变量s

所以cs两者都有值1.