printf和cout为啥会输出不同的结果呢,求解惑
求解惑一下
知识点:
1.宏定义是完全替换的,使用到的地方需要将里面的数据完全替换到代码上
2.运算符优先级:先计算乘除加减,再计算 位移运算
所以:
第一种: 1<< 2 + 2 * 2 = 1<<6 = 64
第二种: cout<<1<<2 + 2 * 2 <<endl; 实际的是16.
另外给个小建议:代码中要是自定义函数,最好不要和系统定义的函数冲突呢.
add(1<<2,2) * 2相当于 1<<2 + 2 * 2
第一种: 1<< 2 + 2 * 2 = 1<<6 = 64
第二种: cout<<1<<2 + 2 * 2 <<endl; 实际输出1和6两个数字,所以是16
==================
要改为:
#define add(a,b) ((a) + (b))
因为#define 是直接替换代码
add(1<<2,2)*2 不是先计算add(1<<2,2)的结果再*2
而且直接把add(1<<2,2)*2 替换成 1<<2+2*2
1<<2+2*2 表达式是先计算2*2 = 4
变成1<<2+4 = 1<<6 = 64
而 cout<< add(1<<2,2)*2 <<endl;
会替换成
cout<< 1<<2+2*2 <<endl;
在 cout 之后的<< 会变为输出流运算符, 输出1 和 2+2*2的结果6
应该改成
#define add(a,b) ((a) + (b))
替换
cout<< ((1<<2)+(2))*2 <<endl;
就没有问题了
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!