以下是引用神vLinux飘飘在2006-6-20 7:50:46的发言:
#include "stdio.h"
int main(void){
int a = '12';
printf("a=%d,b=%d,%d\n",'1','2',a);
return 0;
}
输出:
a=49,b=50,12594
为什么会输出这个~看一下二进制就知道了
'a'= 49 = 110001
'b'= 50 = 110010
'ab'= 12594 = 11000100110010
原理也如SunShining所说,字符常量是int型的缘故
在gcc4.0下完成编译
#include "stdio.h"
int main(void){
int a = '12';
printf("a=%d,b=%d,%d\n",'1','2',a);
return 0;
}
输出:
a=49,b=50,12594
为什么会输出这个~看一下二进制就知道了
'a'= 49 = 110001
'b'= 50 = 110010
'ab'= 12594 = 11000100110010
原理也如SunShining所说,字符常量是int型的缘故
在gcc4.0下完成编译
我发现你很笨!
这个问题很久以前就讨论过了,ChenMo好象也参与的
我记得是一个刚教C语言的老师来问个什么问题
----------------解决方案--------------------------------------------------------
以下是引用SunShining在2006-6-19 23:59:16的发言:
俺明白了..原来字符常量是int型
在 C-FREE下 也可以是 char a='abcd'; 不过因为char变量是一个字节.就取一个吧.(纯粹实验理解.无资料根据)
俺明白了..原来字符常量是int型
在 C-FREE下 也可以是 char a='abcd'; 不过因为char变量是一个字节.就取一个吧.(纯粹实验理解.无资料根据)
在C中,这叫多字节字符
----------------解决方案--------------------------------------------------------
当然,还有一个叫宽字符的
wchar_t c;
c=L'A';
----------------解决方案--------------------------------------------------------
以下是引用feng1256在2006-6-19 23:56:33的发言:
其实就是一个字节,我以前见过一个列表分析各编译器的不同,像这种情况不同的编译器有不同的处理
有的取第一个字符,有的取最后一个字符
这个我也在那里见过,好象是龙书
看编译器这里怎么做的,我发现C总讨论本来就一点不规范的东西
还要知道人家(编写人员)是怎么想的
----------------解决方案--------------------------------------------------------
不可能,这是标准C东西,不是不规范的东西,而是不常见的东西
----------------解决方案--------------------------------------------------------