此代码将打印:


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

最佳答案

如果以这样的十六进制表示形式输出变量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。

关于c - C,帮助我了解此ASCII概率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40640745/

10-17 00:48