新手遇字符问题

K_LOVE 2011-11-11 11:23:28
#include "stdio.h" main()
{
char a=176,b=219;
printf("%c%c%c%c%c\n",b,a,a,a,b);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",a,a,b,a,a);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",b,a,a,a,b);
}请问ASCⅡ编码的字符明明就只到127这个号码,为什么a、b的值都已经大于了127还可以输出一个固定的值?
谢谢!
...全文
146 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
goldbeef 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 suwei2002 的回复:]

LZ可以去查一些关于GBK的资料。
从LZ给出的现象分析,LZ用的系统应该是Windows(也有可能是Linux,但在下没在Linux下做过类似的测试也不太清楚)

Windows下不管是TC还是VC,其命令行运行的环境都是Windows下的cmd.exe。中文Windows下的cmd.exe默认编码就是GBK,而是不ASCII(如果用纯Dos的话是看不到汉字的)。

GBK的基本编码……
[/Quote]LZ正解,受教了
z1058017535 2011-11-12
  • 打赏
  • 举报
回复
就是啊
哪位大仙可以解释为什么会有汉字出现呢
K_LOVE 2011-11-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 suwei2002 的回复:]

LZ可以去查一些关于GBK的资料。
从LZ给出的现象分析,LZ用的系统应该是Windows(也有可能是Linux,但在下没在Linux下做过类似的测试也不太清楚)

Windows下不管是TC还是VC,其命令行运行的环境都是Windows下的cmd.exe。中文Windows下的cmd.exe默认编码就是GBK,而是不ASCII(如果用纯Dos的话是看不到汉字的)。

GBK的基本编码……
[/Quote]
谢谢!受教了
K_LOVE 2011-11-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 qiang81020 的回复:]

#include <stdio.h>

int main(int argc, char **argv)
{

char a = 188, b = 218;
unsigned char c = -68;

printf ("%c %c\n", a, b);
printf ("%d %d\n", a, b);
……
[/Quote]
不明白为什么会有这样的输出数值和?。另外int类型是2个字节,范围为-32768~32767或0~65535
Aliuqiong0 2011-11-12
  • 打赏
  • 举报
回复
郯鞍?
佰佰?
鞍郯?
佰佰?
郯鞍?
运行后出现了这些字,是乱码吧?
feidegengao 2011-11-12
  • 打赏
  • 举报
回复
不明白
K_LOVE 2011-11-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sukiida 的回复:]

超出范围解释成乱码了吧
[/Quote]
不会,是固定的汉字
hui1503539333 2011-11-12
  • 打赏
  • 举报
回复
刚开始的ASCII只用于英语,采用的是一个字节,事实上也只用了127个字符,后来又有别的国家为了让电脑显示他们的语言,就把ASCII码表扩展到了255,但是中国的汉字这么多,怎么才能给电脑识别呢?后来我们聪明的中国人,就采用两个字节,区位码的方式来对ASCII表进行编排,这样就扩展到了65535个字符。。。
Alexander 2011-11-12
  • 打赏
  • 举报
回复
LZ可以去查一些关于GBK的资料。
从LZ给出的现象分析,LZ用的系统应该是Windows(也有可能是Linux,但在下没在Linux下做过类似的测试也不太清楚)

Windows下不管是TC还是VC,其命令行运行的环境都是Windows下的cmd.exe。中文Windows下的cmd.exe默认编码就是GBK,而是不ASCII(如果用纯Dos的话是看不到汉字的)。

GBK的基本编码规则是:当读取字符<128时,就当做ASCII处理;当前字符>127时,会与后面一个字符合并成一16位整数作为汉字的编码。

以LZ程序为例:a=176=0xb0,b=219=0xdb
各行输出的编码为:
b a a a b \n
dbb0 b0b0 db0a
a b a b a \n
b0db b0db b00a
a a b a a \n
b0b0 dbb0 b00a
a b a b a \n
b0db b0db b00a
b a a a b \n
dbb0 b0b0 db0a
查GBK对照表得到:
dbb0=郯
b0b0=鞍
b0db=佰
这样拼起来就得到LZ的输出结果了。
苏客达 2011-11-12
  • 打赏
  • 举报
回复
超出范围解释成乱码了吧
qiang81020 2011-11-12
  • 打赏
  • 举报
回复
#include <stdio.h>

int main(int argc, char **argv)
{

char a = 188, b = 218;
unsigned char c = -68;

printf ("%c %c\n", a, b);
printf ("%d %d\n", a, b);
printf ("%d %d\n", (unsigned char)a, (unsigned char)b);
printf ("%c\n", (char)c);
printf ("%d\n", (char)c);
printf ("%d\n", c);
return 0;
}

run runsult:
?
-68 -38
188 218

-68
188

一个字节8位,当定义不同的变量(char, unsigned char),从内存中取得的值的解释不同。用int 赋值时,8字节能够容纳0-255或-127~127,但是内存中存的都是一样的,只是根据变量不同,解释不同而已。
li08240418 2011-11-12
  • 打赏
  • 举报
回复
128-255貌似是 汇编语言用的
K_LOVE 2011-11-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 aliuqiong0 的回复:]

郯鞍?
佰佰?
鞍郯?
佰佰?
郯鞍?
运行后出现了这些字,是乱码吧?
[/Quote]
如果是乱码的话每次运行应该是不一样的才对,但每次运行都是同样地字符出来。
myhaikuotiankong 2011-11-11
  • 打赏
  • 举报
回复
大于127的也是ASCII码吧。。。
猜的。。。不权威。。。
wangyaosuper 2011-11-11
  • 打赏
  • 举报
回复
这里有高级软件或硬件工程师的岗位虚位以待。工作地点在上海和苏州,工作单位是国内最优秀的通信设备提供商。工作内容:软件是嵌入式C语言研发;硬件是数电模电或射频的研发。要求有至少一年的工作经验(开发或测试)。若有兴趣不妨聊一聊。联系方式:18621387236王先生, 邮箱wangyao840619@gmail.com
chaoplusplus 2011-11-11
  • 打赏
  • 举报
回复
坐等知情人士。。。。。。。。

69,382

社区成员

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

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