c程序设计上的一道题,我昨天编了一下,发现输出的结果难以理解。

为什么会出现问号?还有就是-59和-58是从哪里来的?希望哪位好心人能够帮助我扫清心中的疑惑... 为什么会出现问号?还有就是-59和-58是从哪里来的?希望哪位好心人能够帮助我扫清心中的疑惑 展开
 我来答
White_MouseYBZ
2019-04-08 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6356万
展开全部
?一般就是那个变量的数值没有对应的字符表达,系统便用?代替。char型的范围是-128~127,现在c1=197,c2=198,而197、198都已超出char型的表达范围了,系统根据二进制数值11000101(197)和11000110(198)判断为负数(最高位是1),那么按补码规则,前者是-59,后者是-58。
无限遥远的耀星
2019-04-08 · 超过47用户采纳过TA的回答
知道小有建树答主
回答量:122
采纳率:66%
帮助的人:10.3万
展开全部
第一个问题,出现?。原因是char c1定义的是字符或字符串,变量初始化应该这样c1='197',printf("c1=%c",c1)时,格式化%符只输出1个字符,然而c1接收的值却是3位的整型,所以computuer也迷惑了。
第二个问题,-59的问题,先不说为什么=-59,告诉你错的地方,这个地方不能用格式符%d输出,d输出是整型,定义的字符串强制转换成整型输出,输出的是ascii码。接下来-59,-58,为什么会这样,我告诉你一个规律,198+58=256
197+59=256,当按你的方式输出257或513时,等于1,为什么,你自已理解吧
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syht2000
高粉答主

2019-04-08 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部

超过127的是扩展ascii,在普通CMD下是显示不出来的,需要将代码页调到437或936,至于-59则是因为普通的ascii是8位,超过127后最高位即为1,这个1会被视为符号位即负数

#include"stdio.h"
#include"windows.h" 
int main(void)
{
SetConsoleOutputCP(437);
char a;
a = 197;
printf("a=%c",a);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2019-04-08 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
这是因为所选择的数据类型不妥当造成的。

char能表示的范围是-128~+127
而197则是越界了的。
所以,实际存储的是:
197-256=-59
而所有的负数,以%c格式输出时,均为输出一个?号。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3b5a5d8
2019-04-08 · TA获得超过1229个赞
知道大有可为答主
回答量:1279
采纳率:83%
帮助的人:124万
展开全部
你好,
char 类型的取值范围是 -128 ~ 127;
char 占一个字节,8位;
你赋值 128,那么实际存的值就是-128,
你赋值 129,那么实际存的值就是-127,
因为首位是当做符号位的。
而字符只有0~127,一共128个,负数是没有对应的字符,所以显示为?,算是编译器的一种机制。
祝你生活愉快。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式