C语言问题,求详解

1.若a是32位int类型变量,判断其32个2进位中末两位均为1的表达式为( )。
A、 a&3==3 B、 a&3==11
C、 a&11==3 D、 a&11==11

2.执行语句“for(float x=0,s=0; x!=60; x=x+0.3) s=s+x;”后,变量x的值为( )。
A、不可能大于60 B、不可能大于60.3
C、一定小于60 D、可以远大于60
第一题选A,第二题选 D求详解

1、A,a & 3 == 3,3的二进制为0000 0000 0000 0000 0000 0000 0000 0011,这样就好比忽略a的高30位的值,只取其低2位。如果最低两个位 为二进制的 11,那么该表达式的值就等于 二进制的11(十进制的3),这两个位只要有任何一个位不为1那么该表达式就不可能成立
2、D,因为不能对浮点数直接进行判等的比较,浮点数只是一个近似的值,要比较只能用比较大小的办法来比较,而不能用 == 和 != 来判断,所以for(float x=0,s=0; x!=60; x=x+0.3) s=s+x;有可能会出现死循环,结果x当然就远大于60
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-18
对啊,选A和D
3的二进制数除了最后两位都是1之外其它是全是0
而&字符运算是把按位且运算
每一位对着来看,哪一位上这两个数(二进制数)不都是1,结果这位数上就是0
比如21&3
21是10101
3是11
21 10101
3 00011
&-----------------
00001
不是3,所是它最后两位不是都是1
而3只有最后两位是1,所以前面的一概是0
x!=60,不能这样写,要写成x-60<0.000001才行,float 是有精度的追问

第一题D为什么错了?

追答

11的二进制是1011啊,不是11,&是按二进制的数来运算的

追问

1011
1111
&-----------------
1011

1011
0011
&-----------------
0011

追答

对啊,怎么
所以最后两位都是1,而其它都不是1的是只有3
11的最后两位都是1,但它前面有地方不是0,
所以你要用 a&11==11的话相当于判断了最后两位和倒数第四位都是1

本回答被网友采纳
第2个回答  2013-01-18
第一题A,因为3的二进制是11,1与上1才是1,所以判断末两位是二进制11的只能是与上3后等于3

第二题个人认为x==60
第3个回答  2013-01-18
0 & 1 = 0
1 & 1 = 1

BTW,楼上的,C++里面不能直接写2进制数字的,11转换为10进制就是3.
第4个回答  2013-01-18
选A和D
解释的都挺详细了,我就不说了呵呵
相似回答