下列程序段当a的值为014和0x14时的执行结果分别是多少?

下列程序段当a的值为014和0x14时的执行结果分别是多少?,第1张

你这个搜索排行比较高,但是没人回答正确的,我回答一下,后来人参考吧!

(这道题考的是运算符的优先级)C语言书的附录上面都有,没事可以看看

① a=014时

第一个数为0,说明这个数是八进制

if(a=0xA | a>12):按照“运算符优先级”,先算a>12吗?八进制14等于十进制12,所以a不大于12。结果为0

第二步:0xA | 0 :十六进制A,按位或 0,结果肯定还是十六进制A了,任何数按位或0的话,等于任何数。所以这个if为真

第三步:if(011&10 == a):这里还是要考虑运算符的优先级,==的优先级比&的优先级高,所以10==a吗? 第二步可以看到,a的值已经变成0xA了,十六进制A等于十进制10,所以10==a为真。真就是1

第四步:011&1 为真吗? 八进制011等于二进制1001,十进制1等于二进制0001,所以1001&0001 按位与后为0001 结果为真,所以执行printf("%d!\n", a)

第五步:第二步已经把a改变了,所以a等于10,结果10!

②a=0x14时

0x为十六进制,十六进制14等于十进制20,等于二进制10100

解答:

1、还是优先级的问题,20大于12吗?yes,yes为真为1

2、十六进制A等于二进制1010

3、1010 | 0001 结果为1011等于十进制11,所以这个时候a=11

4、if(011&10==a)

5、注意优先级 10==11吗?假,为0

6、011&0  八进制11,转化为二进制为1001&0000结果0000 假

7、第6的时候为假,所以执行else,结果为Right!11

结束!!

注意问题:

1、==的优先级大于&

2、>的优先级大于| 大于=

3、c语言是按顺序执行的,a=0xA | 先运算0xA,因为0xA后面有一个 | ,所以先执行| ,执行0xA | a,但是a后面有一个>,>的优先级又比|高,所以先执行>, 执行a>12,12后面没什么东西了,所以就先执行a>12 了。

4、考点:1、按顺序执行 2、运算符优先级

a=1+2+3*4 等于什么呢?按照数学的话,一眼看出来先执行3*4,但这里是C语言

按顺序执行,先执行1+2,2后面是+号,优先级一样,所以先执行1+2=3

3+3*4 --- 3+3 但是3后面*,所以这里就先执行*了,这时3+12

所以结果等于15

//以第一段为例

#include <stdio.h>

int main()

{

int a

scanf("%d", &a) //你输入14

//先算a>12 显然表达式的值是1 然后再算 位或,最后算赋值,10 | 1 的值是11

//所以执行第二个if语句。

if (a=0xa | a > 12) 

//先算 10==a 因为a=11所以这个表达式是假的,即为0 然后与八进制的011即十进制的9进行

//与运算,显然0 & 9的值还是0,所以执行后面的else运算

if (011&10 == a) printf("%d!\n", a)

else printf("right!%d\n", a)

else printf("wrong %d\n", a)

return 0

}

你的程序两点注意,其一,运算符的优先级,位运算符,只有~是高于关系运算符的,其它的都低于关系 运算符,其二, 011 014这样的整数在源码中,表示的是八进制的整型常量。。

结果为17

for(k=0k<8k+=2)

a+=*(a+k)

这个循环是指的取a数组中下标为0,2,4,6的成员值累加,

得到的结果为5+7+1+4=17

不过,应该将数组a和变量a的名字定义成不同的,否则编译会报错


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7740828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存