| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1090 人关注过本帖
标题:字符的问题
只看楼主 加入收藏
welling01
Rank: 1
等 级:新手上路
帖 子:14
专家分:9
注 册:2011-9-15
结帖率:100%
收藏
已结贴  问题点数:0 回复次数:14 
字符的问题
刚学习字符,写一段字符和数字的程序,用VC+6编译,可是结果有点不解,大伙帮我解释一下
详情看图:
图片附件: 游客没有浏览图片的权限,请 登录注册

为什么第二行的结果不是65和53.
搜索更多相关主题的帖子: 学习 
2011-10-11 11:59
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
收藏
得分:5 
你见过 '65' 这样的字面量字符么

C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2011-10-11 13:24
黄昏的王座
Rank: 2
来 自:安徽亳州
等 级:论坛游民
帖 子:38
专家分:65
注 册:2011-10-5
收藏
得分:0 
太小了  看不清啊
2011-10-11 19:58
welling01
Rank: 1
等 级:新手上路
帖 子:14
专家分:9
注 册:2011-9-15
收藏
得分:0 
以下是引用tisyang在2011-10-11 13:24:57的发言:

你见过 '65' 这样的字面量字符么
从你的这个说法来理解就是说字符只能是单个的,对吧。
2011-10-12 11:20
welling01
Rank: 1
等 级:新手上路
帖 子:14
专家分:9
注 册:2011-9-15
收藏
得分:0 
以下是引用黄昏的王座在2011-10-11 19:58:27的发言:

太小了  看不清啊
你可以直接单击图片就可以放大看了。
2011-10-12 11:21
GeneralJing
Rank: 2
等 级:论坛游民
帖 子:30
专家分:15
注 册:2011-9-26
收藏
得分:5 
单引号括起来的内容应该是一个字节,如果是两个字节,结果出如说cout<<'  ';我在我那个程序里就这样写的,结果出来之后是一系列好大的数据,完全不是我想要的,所以对单引号里的内容最好只有一个字节。不然会出现意外的结果
2011-10-12 12:13
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:5 
这样说吧
你的aa="65"

这个“65”是字符串,在ROM中占据两个字节
其中一个字节存放ASC('6'),另外一个存放ASC('5'),
你的aa是char,在内存(堆)中占据1个字节

用8位去存放16位会溢出,你的机器截取了低8位,所以aa其实是‘5’
如果你写aa="1231231234",那么aa='4';
(这里也可以看出你的机器/编译器运行在小端模式,即‘6’在高地址位,‘5’在低地址位,机器在赋值的时候寻址的是“65”这个字符串的首地址(低位),也就是5的地址)

[ 本帖最后由 我是菜鸟哦 于 2011-10-12 20:22 编辑 ]

偶是菜鸟鸟偶惧WHO?!!!!
2011-10-12 14:47
welling01
Rank: 1
等 级:新手上路
帖 子:14
专家分:9
注 册:2011-9-15
收藏
得分:0 
以下是引用我是菜鸟哦在2011-10-12 14:47:28的发言:

这样说吧
你的aa="65"
 
这个“65”是字符串,在ROM中占据两个字节
其中一个字节存放ASC('6'),另外一个存放ASC('5'),
你的aa是char,在内存(堆)中占据1个字节
 
用8位去存放16位会溢出,你的机器截取了低8位,所以aa其实是‘5’
如果你写aa="1231231234",那么aa='4';
(这里也可以看出你的机器/编译器运行在小端模式,即‘6’在高地址位,‘5’在低地址位,机器在赋值的时候寻址的是“65”这个字符串的首地址(低位),也就是5的地址)
谢谢你回答,但这个语句不是字符串,是字符常量。
其运行的结果是第二行和第三行结果是一样的。这么看来是
char aa='65'   

char aa='\065'
是一样的定义。也就是说二者写法是一样的。

完整代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
  char   a=65;            
  char   aa='65';
  char   aaa='\065';
  char   aaaa='\x65';

  printf("a is %c not %d,\n",a,a);
  printf("aa is %c not %d,\n",aa,aa);//我打算是让他输出65字符量和65的数字量。但是运行的结果不是,我有些想不明白。
A  printf("aaa is %c not %d,\n",aaa,aaa);
  printf("aaaa is %c not %d,\n",aaaa,aaaa);
      return 0;
}
大家可以运行一下。

[ 本帖最后由 welling01 于 2011-10-13 16:37 编辑 ]
2011-10-13 16:25
welling01
Rank: 1
等 级:新手上路
帖 子:14
专家分:9
注 册:2011-9-15
收藏
得分:0 
终于明白了。我将程序又增加内容后:其原因是跟char类型有关,这个定义只认单字面量,而65不是单字面量,就向7楼的大虾说得那样,char只能读出低位的值。
#include <stdio.h>
#include <stdlib.h>
int main()
{
  char   a=65;            
  char   aa='65';
  char   aaa='\065';
  char   aaaa='\x65';
  char   aaaaa='\65';
  char   aaaaaa='4';

  printf("a is %c not %d,\n",a,a);
  printf("aa is %c not %d,\n",aa,aa);
  printf("aaa is %c not %d,\n",aaa,aaa);
  printf("aaaa is %c not %d,\n",aaaa,aaaa);
  printf("aaaaa is %c not %d,\n",aaaaa,aaaaa);
  printf("aaaaaa is %c not %d,\n",aaaaaa,aaaaaa);
      return 0;
}
运行结果如下
图片附件: 游客没有浏览图片的权限,请 登录注册

2011-10-13 16:51
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
为什么名字要 a, aa, aaa 的,就不能 a, b, c 这样嘛……
2011-10-13 21:33
快速回复:字符的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033646 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved