CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

问一个简单的问题

楼主pSK_LB(苦功夫)2005-08-01 16:35:14 在 C/C++ / C++ 语言 提问

unsigned   char   a;  
  int   b;  
   
  a   =   '20';  
  b   =   a;  
   
  b就等于20         //   这让我不懂  
   
  我好像觉得不可能,char只能接受单字符啊,两者也不可能这样赋值啊.  
  unsigned   char       和char     的内在区别在那里??  
  问题点数:20、回复次数:9Top

1 楼Kenmark(fenix)回复于 2005-08-01 16:40:53 得分 0

调试出来B的值是48(VC++6.0)两个数出来的大概是UNICODETop

2 楼everestsun(至芝)回复于 2005-08-01 16:55:23 得分 10

这是特例,字符就是以数字(utf)编码,可以类型转换.既然可以把char当成int,我认为int分为unsigned,所以char也可以.但我看过,只有>0   <127时,char有字符对应.其他为?Top

3 楼windking21(想玩玩WOW 真的那么难吗)回复于 2005-08-01 17:08:02 得分 0

数据类型的强制转换  
  就你这个而言unsigned   有没有调试都是48  
  可能和编译器有关(vc6下)Top

4 楼xuanwenchao(xuanwenchao)回复于 2005-08-01 17:33:43 得分 0

VC6下等于48  
  a   =   '20';  
  由于char为一个字节所以等同于a   =   '0';  
  b   =   a;  
  b为int型,所以取的是字符'0'的ASCII码的值为48  
  Top

5 楼diandian82(点点(nothing))回复于 2005-08-01 17:36:52 得分 0

不安全的行为,最好不要这样,也没必要Top

6 楼lyclowlevel(蓬蒿人)回复于 2005-08-01 17:56:12 得分 5

a   =   '20';//'20'被看作两个字符型常量。字符型常量在内存是存储其对应的ANSII码。  
  //因此,对于这个语句:编译器先开辟两个字节的内存空间(这里的长度不一定,我的  
  //计算机中sizeof(char)是一个字节);然后,将‘2’的ANSII值50存在第一个字节中  
  //(从左到右),将‘0’的ANSII值48存在第二个字节中。你如果定义一个整型的变  
  //量的话,由于整型变量是4字节的,空间足够,就没有发生截断,直接进行按字节拷贝,  
  //那么该整型变量中的值就是50*256+48=12848;  
   
  //在这个题目中,由于a是字符型变量,在内存中只占一个字节,按字节拷贝,只有将第  
  //二个字节的拷贝过来,而放弃了第一个字节,因此a对应的内存中只存了值48(0对应的  
  //ANSII值)。所以:  
  a='20';  
  //等价于:  
  a='0';Top

7 楼azuresn(司空摘星)回复于 2005-08-01 22:25:03 得分 0

俺还真没想过a   =   '20';这样的写法,在我认为根本都不会通过编译的,甚至自己都不会这么想这么干的,不过看了楼上各位达人的话,又温习了一把旧知识。Top

8 楼pSK_LB(苦功夫)回复于 2005-08-02 09:48:36 得分 0

a   在输出的时候是得到了各位所说的结果,,我只是在这随便写的一个例罢了,  
  各位如果把a     定义为一个char   *     a="20",你用TextOut输出就为20,,  
  b   =   atoi(a);  
  b     输出就为20.  
   
  everestsun说的可能是对的,我用atoi就无法转化unsigned   char    
   
  Top

9 楼changpei(我的博客:http:\\changpei.tianyablog.com)回复于 2005-08-02 09:56:26 得分 5

unsigned   char   a;  
  int   b;  
   
  a   =   20;//no   ''  
  b   =   a;//b   =   20Top

相关问题

  • 简单问题~简单问!
  • 简单问题不简单!
  • 简单问题
  • 简单问题
  • 简单问题??
  • 简单问题!!!!
  • 简单问题!!!
  • 简单问题。
  • 简单问题++
  • 简单问题!!

关键词

  • 字符
  • unsigned
  • char

得分解答快速导航

  • 帖主:pSK_LB
  • everestsun
  • lyclowlevel
  • changpei

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo