
c程序设计上的一道题,我昨天编了一下,发现输出的结果难以理解。
5个回答
展开全部
?一般就是那个变量的数值没有对应的字符表达,系统便用?代替。char型的范围是-128~127,现在c1=197,c2=198,而197、198都已超出char型的表达范围了,系统根据二进制数值11000101(197)和11000110(198)判断为负数(最高位是1),那么按补码规则,前者是-59,后者是-58。
展开全部
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
超过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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是因为所选择的数据类型不妥当造成的。
char能表示的范围是-128~+127
而197则是越界了的。
所以,实际存储的是:
197-256=-59
而所有的负数,以%c格式输出时,均为输出一个?号。
char能表示的范围是-128~+127
而197则是越界了的。
所以,实际存储的是:
197-256=-59
而所有的负数,以%c格式输出时,均为输出一个?号。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好,
char 类型的取值范围是 -128 ~ 127;
char 占一个字节,8位;
你赋值 128,那么实际存的值就是-128,
你赋值 129,那么实际存的值就是-127,
因为首位是当做符号位的。
而字符只有0~127,一共128个,负数是没有对应的字符,所以显示为?,算是编译器的一种机制。
祝你生活愉快。
char 类型的取值范围是 -128 ~ 127;
char 占一个字节,8位;
你赋值 128,那么实际存的值就是-128,
你赋值 129,那么实际存的值就是-127,
因为首位是当做符号位的。
而字符只有0~127,一共128个,负数是没有对应的字符,所以显示为?,算是编译器的一种机制。
祝你生活愉快。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |