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为什么和其他三个不一样? 展开
{
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为什么和其他三个不一样? 展开
1个回答
展开全部
楼主。。。。我这里显示的4个都是 等于415 。。。VC6.0环境
怎么跟你不一样,为什么是415我倒是能解释给你。n1=400我确实不知道。
怎么跟你不一样,为什么是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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询