求助
void main(){
int a,b=322;
float x,y=8.88;
char c1='k',c2;
a=y;
x=b;
a=c1;
c2=b;
printf("%d,%f,%d,%c",a,x,a,c2);
}
这个代码怎么出来结果是107,322.000000,107,BPress any key to continue
不是很懂这两个107怎么来的 还有后边的英语也不知道怎么出来的 我看看 额外减小 发表于 2023-2-20 19:44
我看看
我加了\n 现在答案变成107
,322.000000
,107
,B a先被赋值为 y 的值,再被赋值为 c1 的值,所以打印出来的时候应该输出的 a 是 c1 的值,由于打印的占位符是 "%d" 所以打印 c1='k' 的ASCII码,也就是107 额外减小 发表于 2023-2-20 19:47
a先被赋值为 y 的值,再被赋值为 c1 的值,所以打印出来的时候应该输出的 a 是 c1 的值,由于打印的占位符 ...
c2的值是怎么成B的 程序实际输出的结果是:
107,322.000000,107,B
后面那个
Press any key to continue
是DEV-C++的调试结果。告诉你说这个程序结束了
用stdlib里面的system("pause")有相同效果 本帖最后由 liuhongrun2022 于 2023-2-20 19:54 编辑
大苏打dd 发表于 2023-2-20 19:49
c2的值是怎么成B的
char字符占 8bit 的空间,表达范围是 0~255,你赋的值 322 已超出其可表达的范围,高位部分会被截断抛弃。
如322,其二进制为0000 0001 0100 0010(用十六进制来表达即 0x142 ),因为只能存放 8bit 的数据,故而变量 c2 实际存放的仅是322的低8位,即 0100 0010 (用十六进制来表达即 0x42 ),用十进制来表达即是 66 ,对应 ASCII 码正好是字符'B' 大苏打dd 发表于 2023-2-20 19:49
c2的值是怎么成B的
你把 char 类型的 c2 赋值为 b=322 嘛,因为 char 类型尺寸为1字节,存放不了 322这么大的数字,所以溢出了(相当于减掉256)所以c2 就变成66,即'B'的ASCII码 额外减小 发表于 2023-2-20 19:51
程序实际输出的结果是:
107,322.000000,107,B
后面那个
有点不理解那个B,c2=b 之后c2不是322吗 大苏打dd 发表于 2023-2-20 19:53
有点不理解那个B,c2=b 之后c2不是322吗
溢出了。因为c2是char类型,不能存放322.具体我觉的liuhongrun说的更清楚 额外减小 发表于 2023-2-20 19:53
你把 char 类型的 c2 赋值为 b=322 嘛,因为 char 类型尺寸为1字节,存放不了 322这么大的数字,所以溢出 ...
原来如此 谢谢你 大苏打dd 发表于 2023-2-20 19:53
有点不理解那个B,c2=b 之后c2不是322吗
%c 会把数字识别成ASCII码的 大苏打dd 发表于 2023-2-20 19:55
原来如此 谢谢你
不用谢。我觉得最佳应该给蓝色的这位(
页:
[1]