首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

[]问一个vc上unsigned char和char区别的有关问题

2012-07-30 
[求助]问一个vc下unsigned char和char区别的问题环境是vc++#includestdio.hvoid main(){unsigned char a

[求助]问一个vc下unsigned char和char区别的问题
环境是vc++
#include<stdio.h>
void main()
{
unsigned char a = 200;
unsigned char b = 100;
unsigned char c;
c = a+b;
printf("%d %d\n",a+b,c);
}

输出是300 44
问一下为什么printf里面相加结果就不一样了啊?

然后我把a、b、c换成了char型的
#include<stdio.h>
void main()
{
char a = 200;
char b = 100;
char c;
c = a+b;
printf("%d %d\n",a+b,c);
}
输出就是44 44
问一下各位大虾,为什么会有这样的差别啊。。。

[解决办法]
sorry,第二个回答错误了。
应该是:
char a = 200; 与下面的句子是一样的。
char a = -56;
a+b当整数运算,结果必须是44.

第一个unsigned char a = 200;先转成int型200再运算。

这个运算涉及C转型问题。
[解决办法]
咱来看a+b是怎么开始算的。
a为无符char,值为200,转型为int型,unsigned char的信息没有丢失,是200, b也一样变为int型,把运算结果的整数压入栈就是300了。
如果:
a为signed char,在初始化时200表示的就是按-56解释,这点是规定。
然后转型signed char 转为int,-56的信息没有丢失,是-56,那么和b相加,结果是44.

记住,a+b的结果默认是整数,就将这32位整型入栈,编译器更不会按类型指示符来确定它的入栈类型。
《可变目标C编译器设计与实现》一书及代码有详细的实现。

[解决办法]

探讨
就是说在计算a+b的时候,会将a和b先转为int型?a+b也就是int型入栈?

热点排行