陆朝阳的老婆干什么的:C的小问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 17:04:55
main()
{int a=014
if (a=0xA|a>12)
if (011&10==a)printf("a=%d\n",a)
else printf("b\n")
}

1。输出结果是a=10
对于这个结果我不能理解
能不能有人帮我把两个if语句详细地解释一下 程序是怎样运行出这样的结果的
2。当a的初值改为0x14时的情况呢?

谢谢大家!
我所不明白的部分是:
1。 (a=0xA|a>12) 中10与10按位或,值不应该还是10吗?那么10>12怎么会得到“真”呢?
2。011&10=8 那么8==10怎么又能得到“真”呢?
3。既然在第一个if语句中就对a重新赋值,那么a的初值为014或者0x14怎么会导致不同的结果呢?难道在第一个if语句中的第二个a所表示的是初值的a?那又是为什么呢?

谢谢!

程序应该是这样的吧(加上了分号):
void main()
{int a=014;
if (a=0xA | a>12)
if (011 & 10==a) printf("a=%d\n",a);
else printf("b\n");
}
在(a=0xA|a>12)中,">"的优先级是高于"|"的。赋值号"="的优先级最低。那么我们先计算a>12。在此时,a的值是014=12,判断12>12不成立。返回0。然后再处理“0xA | 0 ”,10和0按位或。结果是10。把他赋给a,他是一个非0的数,所以得到“真”。

011是八进制,相当于十进制的9。在10==a的判断中,a的值是上面的10,那么10==10是成立的,返回1,然后进行9 & 1的计算,结果是1。

当你把a=014改成a=0x14时,a的值相当于十进制的20。然后分析过程按照第一问那样,(a=0xA|a>12)就相当于a=10|1,结果是a=11。返回真。而011&10==a中,a的值是11,所以此相当于9&0,结果是0。

看你也对编程很感兴趣,我们一起学习?我的QQ:59818136 请注明你是谁^_^
楼上的,很遗憾,你的优先级错了。赋值号的优先级是最低的!!

怎么了不能理解哦
你把八进制和十六进制改为十进制就 行

0是false,其他是ture
if (a=0xA|a>12)
先执行a=0xA 所以a=10,|优先级低于>,所以接着是a>12,结果是0(false),ture|false 结果是ture,所以继续执行if中的,
if (011&10==a)
==先于&,所以10==a是true,11是true,所以(2进制)1011&1010的结果是1010,是true,进入if中的打印a.
补充:看来你的问题就是出在优先级上
http://www.itvip.org/program/c/2006-03-13/1142242851d575.html我是在这里找到的c运算符优先级的,自己搞下来看看吧。:)