(这道题考的是运算符的优先级)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这样的整数在源码中,表示的是八进制的整型常量。。
结果为17for(k=0k<8k+=2)
a+=*(a+k)
这个循环是指的取a数组中下标为0,2,4,6的成员值累加,
得到的结果为5+7+1+4=17
不过,应该将数组a和变量a的名字定义成不同的,否则编译会报错
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)