两个C的题目

来源:百度知道 编辑:UC知道 时间:2024/05/30 23:30:10
1、已知float y;int x=-3;执行语句y=x%2;变量y的值为?
2、已知int a=15,b=240;则表达式(a&b)&b||b的结果为?
我在TC2.0上运行了的,答案是
1、0
2、1
但不知道为什么

第一个题 可能你在输出时 printf("%d",y); 用的是%d整形输出的原因。 正确的 应该是 -1.000000
第二个题 所有项都是“真” 结果肯定为“1”

第一题:模运算的时候,如果操作数中有负数,其结果的符号位取决于具体的编译器,但是3 / 2的余数不会是0的,你再试试吧
第二题:位运算的优先级高于逻辑运算
240(Dec) = F0(Hex)
15(Dec) = 0F(Hex)
1.(a & b) = (15 & 240) = (0F & F0) = 0
2.(a & b) & b = 0 & 240 = 0
3.(a & b) & b || b = 0 || 240 = 1 (true)

其实这是关乎编译器的问题的,但是肯定不等于0,因为y是FLOAT型的,我的是-1.000000
第二个是真的

"&"表示按位与,即要转化为2进制再与.
a=00001111,b=11110000
a&b: 00001111
& 11110000
= 00000000
所以a&b=0

第一题:1.000000(应该是1,可是由于c是float因此被强制转化为1.000000)
第二个:结果为1,&是位运算符,即把a和b写成2进制,同位上同为1者这位为1,不然为0;||是逻辑或运算,只要有一方为真即为真。

第一题是编译器的缘故吧
第二题因为表达式为真所以值为1