问一个简单的问题
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




