C,帮助我理解这个 ASCII 问题
Posted
技术标签:
【中文标题】C,帮助我理解这个 ASCII 问题【英文标题】:C ,help me in understanding this ASCII prob 【发布时间】:2016-11-16 19:32:35 【问题描述】:此代码将打印:
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);
【问题讨论】:
@StoryTeller 如果您想查看数值,请不要。 c=1 出于同样的原因 s=1 (在您的机器上)字符是 8 位。 Int 是 32 位。不同之处在于 65537 完全适合 int 但不适合 char。你得到 1 因为 65537 % (2^8) = 1。char
的大小(以字节为单位)是多少? int
的大小(以字节为单位)是多少?这些类型的最大值是多少?当一个数字溢出时会发生什么?
@BadZen:如果 char
已签名,则它是实现定义的,只有当我们知道实现是什么以及它如何处理它时,它才是“定义明确的”。链接的问题是关于unsigned char
!
【参考方案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。
【讨论】:
以上是关于C,帮助我理解这个 ASCII 问题的主要内容,如果未能解决你的问题,请参考以下文章