一道c语言问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 02:40:22
若有说明int x=10,y=20;请写出printf语句对应的输出结果是
printf("%3x\n",(x%y,x-y,x+y));
答案是 1e
请问过程是什么?麻烦讲笔算过程,谢谢!

呵呵这个句子挺有意思!老汉看看!等会给你结果

结果出来了!我给你最准确的答案!因为我是在汇编级调试出来的!
代码,printf("%3x\n",(x%y,x-y,x+y)); 意思是输出一个16进制数
这个数一共占3位,这个数不够3位时,在其前面补空格。
如果改成printf("%03x\n",(x%y,x-y,x+y));那么就是在前面补0了不是空格了,改成后者比较直观一些。

代码的具体执行情况是这样的,(x%y,x-y,x+y)这个代码中编译器只
识别其中的"x+y"其他的全部省略到。所以这个式子实际上就是等于
printf("%3x\n,(x+y)); 而已。

这是分析的代码:
218: int x=10,y=20; //c代码
004010A2 mov dword ptr [ebp-4],0Ah //向x赋值
004010A9 mov dword ptr [ebp-8],14h //向y赋值
219: printf("%04x\n",(x%y,x-y,x+y));
004010B0 mov eax,dword ptr [ebp-4] //取x值
004010B3 add eax,dword ptr [ebp-8] //用x值+上y的值
004010B6 push eax //把上面运算的和压入
004010B7 push offset string "%03x\n" (0043119c)
004010BC call printf (004084b0) //调用printf
004010C1 add esp,8 ///平栈

以上有问题可以联系我!用短消息!

dan