char z = 500的输出

Himmel 2003-10-21 02:19:44
char z = 500;

cout<<z;
为什么输出的是ASCII Code里10进制数是20的那个符号?
请高手解答
谢谢!!
...全文
162 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
vico2 2003-10-21
  • 打赏
  • 举报
回复
主要是明白道理!
tibetan 2003-10-21
  • 打赏
  • 举报
回复
上面有点小错误,(应该是用的表里有的是128个值,有的是256,最大值是127/255)不好意思。
tibetan 2003-10-21
  • 打赏
  • 举报
回复
字符8位,范围应该是-128--127(2^8-1)才对,但这也不完全真确。因为不同的系统或许不一样,有的系统是把字符类型当作无符号的数来对待,所以就应该是0--2^8-1(255)。你能看到在ASCII 表里有的是127个值,有的是255个值。就是因为对待不同。不过127个是国际标准的,255的是扩展码的。正如 kissme1943(jjj) 所说的,如果任何类型的值超出起取值范围的时候就会循环取值。从你反映的问题来看,你的系统应该是当作无符号类型对待。
看:10+245=255 //也就是到了最后取值范围的值,应该从0取值,循环开始第一次。
245+255=500//总共等于500。可以看出其值刚好是10,我是反推的。
希望你有好运气。不过我不知道你为什么这么做?
njuhuangmy 2003-10-21
  • 打赏
  • 举报
回复
500 化成 16 进制 是 1f4

而变成字符型取 最低位 f4

bestfyj 2003-10-21
  • 打赏
  • 举报
回复
char为8bit,所以其取值范围为 -127~128
程序中z的取值超出了这个范围,所以会出现不一致
你可以用int z=500
ok,wish u happy
kissme1943 2003-10-21
  • 打赏
  • 举报
回复
因为是char型,char 和int会自动转换的,超过范围会循环
char型的范围是-128 到 127 所以 char z = 128 和 char z = -128 输出是一样的
char z = 129 和 char z = -127 输出是一样的
128+256 = 384 char z = 128+256 和 char z = 128 输出是一样的
500 = 256 + 244 char z = 500 和 char z = 244 输出是一样的
500 = 256 + 127 + 117 117 - 128 = 12 char z = 500 和 char z = -12 是一样的

我试了试 和ASCII Code里10进制数是20的那个符号 不一样
arvid_gs 2003-10-21
  • 打赏
  • 举报
回复
ASCII表的转换是系统编译的时候自动运行的。
Himmel 2003-10-21
  • 打赏
  • 举报
回复
500到-12的问题我已经搞明白了 谢谢kissme1943(jjj)
可是我不明白系统是怎么把-12转化成ASCII表里的符号的
谢谢回答
Himmel 2003-10-21
  • 打赏
  • 举报
回复
我在win98下的borland c++ 5.02中运行结果确实是和ASCII里10(d)的那个符号是一样的
但是我在xp下的borland c++5.02中结果是不显示任何东西 compiler提示lose digital
我觉得也许是和操作系统也有关系.
回tibetan我这么做是因为学校里的练习题老师无法解答为什么会出现这个符号

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧