C语言关于int, char, unsigned char转换问题

int_tmain(intargc,_TCHAR*argv[]){charc[2];char*p=c;c[0]=-41;c[1]=-56;intn0=(unsignedc... int _tmain(int argc, _TCHAR* argv[])
{
char c[2];
char *p = c;
c[0] = -41;
c[1] = -56;
int n0 = (unsigned char)c[0] + (unsigned char)c[1];
int n1 = (unsigned char)*p + (unsigned char)*++p;
int n2 = (unsigned char)(-41) + (unsigned char)(-56);
p = c;
int n3 = (unsigned char)*p;
n3 += (unsigned char)*++p;
printf("n0=%d\nn1=%d\nn2=%d\nn3=%d\n", n0, n1, n2, n3);
return 0;
}

运行结果:
n0=415
n1=400
n2=415
n3=415

n1为什么和其他三个不一样?
展开
 我来答
魔囡4583246
2013-01-19 · 超过25用户采纳过TA的回答
知道答主
回答量:43
采纳率:0%
帮助的人:60.6万
展开全部
楼主。。。。我这里显示的4个都是 等于415 。。。VC6.0环境

怎么跟你不一样,为什么是415我倒是能解释给你。n1=400我确实不知道。
追问
我用的是VS2008...

难道是编译器问题?
追答
嗯。。很有可能,我刚才用vs2005试了一下,结果跟你的一样,我觉得应该是编译器对于(++i)+(++i)+(++i)
这类的算法可能不太一样。但你那个答案我还没考虑,我一会看看。。

有可能他是先进行了++p,然后再进行相加,这时的p其实指向的是c[1],所以是c[1]+c[1]
但为什么是先进行++p,可能就是编译器的问题了。又的编译器(比如vc6.0)先进行的不是++p,造成结果不一样,从n3的结果应该能看出来。

你可以先看看这个
http://zhidao.baidu.com/question/75937504.html
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式