此代码将打印:
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
。因此
c
和s
两者的值均为1。关于c - C,帮助我了解此ASCII概率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40640745/