此代码将打印:
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);
}
答案 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
。
所以c
和s
两者都有值1.