永发信息网

unsigned a=16; printf(“%d,%d,%d\n”,a>>2,a=a>>2,a); 以上程序片段的输出结果是( ).

答案:4  悬赏:20  手机版
解决时间 2021-11-20 01:12
unsigned a=16; printf(“%d,%d,%d\n”,a>>2,a=a>>2,a); 以上程序片段的输出结果是( ).
最佳答案
qwreasdasf追问char s[20]=”abcd”;
char *ssp=s;
sp++;
puts(strcat(sp,”ABCD”));
全部回答
输出:2
因为=运算符的优先级低于,(逗号)运算符,所以printf("%d\n",a=a+1,a+6,b+2);等效于:printf("%d\n",(a=a+1),(a+6),(b+2));也就是printf多提供了2个无用的参数
注意:不能把a=a+1,a+6,b+2当做是一个,(逗号)表达式
最后 a的值是 4,因为第3次计算并没有进行赋值运算)
a=16 二进制 0001 0000 只写8位,前面更多位都是0,在此例中不影响结果
函数参数入栈的顺序是从右往左,
所以,最早计算的值是 第3个参数,16
第2个计算的是 第2个参数,也就是 a=a>>2, 将a右移2位赋值给a, 即0000 0100 值为 4
第3个计算的是 第一个参数 a>>2 右移2位,即 0000 0001 为 1
输出结果是 1, 4, 16
(最后 a的值是 4,因为第3次计算并没有进行赋值运算)

发现的一个问题,在VC编译器下,输出结果是 1,4,4, 看反汇编的代码发现是先算了第2个参数的,在另外一个编译器下输出是 1,4,16,由此可以肯定VC编译器出现错误,因为函数参数从右往左入栈这一点是毫无疑问的,即使是在VC下,int i=1; printf("%d,%d,%d",i++,i++,i++);这样的语句也是显示3,2,1 (由此证明从右往左计算),此例在VC下从第2项开始计算是错误的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
苏州橘子网络科技有限公司的介绍
这是什么植物,根是一块一块的,外边是红色的
24伏汽车在行驶中电压表电压25伏,是什么原因?
我被男朋友睡了,我两只是亲吻,他要摸我,我
华硕p5q pro主板 如何插开关机跳线 详细一点
求 凑佳苗《告白》txt版 要全文哦、谢谢、
中东版,美版和中规的车有什么区别?
骑马与砍杀光明与黑暗生盾或者铁盾怎么得
汇南小学地址在什么地方,想过去办事,
12岁156cm可以长到多少厘米
单个蜂子蜇到后是不是马蜂
买了个冰糯玉不知道是真是假,求解答,求市场
9.广交所与天交所区别?
有喝过小麦白啤的吗?喝起来怎么样啊?哪种小
四十来岁是指多少到多少岁
推荐资讯
刚建的网站文章怎么写
普中51单片机的仿真器有什么用?
出租车专用停车场(中和街与徽州路交叉口西南5
韩文歌呜咽用中文唱的翻译
数字0到9的大写怎么写?
为什么人会闹心呢?
我想在海南投资买橡胶林!4年橡胶树300元一株
lanvin香水是不是名贵香水的品牌之一?
一鸣琴行(驻马店确山县)地址好找么,我有些事
预制空心板3ykb 4062 3ykb4052是什么意思
请教php curl模拟get请求与直接在浏览器访问
我男朋友几年前被人骗去做诈骗犯 前两年有在
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?