徐州涛天世纪华联:c 语言中的问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/30 08:33:42
语句:printf("%d \n",12 &012);的输出结果是
A) 12 B) 8 C) 6 D) 012

12 &012
表示的意义是将十进度制的12与八进制的012(转换为十进制为10)求逻辑与运算,
在内存中的表示为:
12-------1100
012-----1010
他们的与运算结果为:
------1100
---与1010
-------------
------1000
二进度制的1000转换为十进制就为8.
所以8是这样来的.
--------------------------------------
下面的程序可以体现出:
--------------------------------------
#include <stdio.h>

int main(void)
{
printf("[%d]\n",12&012);
printf("[%d]\n",12);
printf("[%d]\n",012);
printf("[%d]\n",12&8);

if((12&012)){
printf("12&012 is true\n");
printf("[%d]\n",12&012);
}else{
printf("12&012 is false\n");
}

return 0;
}
--------------------------
该程序在编译的过程中会提示条件永远为真,
因为两个非零的数求与运算结果永远为真,
为真的那个结果就是求与的结果.
即逻辑与的结果就是按二进制按位与的结果.

%d 输出整数12 因为printf是从左扫到右 后面的都忽略了

最后输出结果是
A

试试不就知道了吗

我试过了 答案是8,原理不清楚,期待其他人的回答.