作业:试图理清我试图计算C的操作

时间:2013-03-17 04:51:13

标签: c bit-manipulation boolean-logic flow-control

很抱歉问你们,而不是我的教授。 (它应该在几个小时内到期而且她不可用) 但我只想找到正确方向的一点。

今晚我写的一件事说明了两件事......

Single-character versions of the C logical operators:

& for && (logical AND)
| for || (logical OR)
! for logical NOT

和...作为示例输出。

Enter an expression: (0 & 1) | (1 & 1)
Result: (0 & 1) | (1 & 1) = true

我的伪逻辑是接受'&'的输入或'|'并将它作为'&&'返回或'||'并根据输入的表达式将它们全部重新组合在一起,让程序进行数学计算。

但我不明白是什么会使上述表达式变为真实?或者是假的?我应该研究什么来更多地关注上述表达?什么使它成为真或假?

3 个答案:

答案 0 :(得分:2)

这样看:

(0 & 1) | (1 & 1)

= (0 and 1) or (1 and 1)

= (false and true) or (true and true)

= (false) or (true)

= true

Further reading at wikipedia

答案 1 :(得分:2)

C中truefalse的概念是0的整数falsetrue的非零数字。

“{1}},&|~等”单一“布尔运算符称为按位运算符。

他们分别按照逻辑表 - 一个或多个,一个补​​充(不)和异或一个一个接一个地处理两个数字。

所以,你的表达:

^为真,因为(0 & 1) | (1 & 1) = 0 & 10 = 1 & 110 | 1。这是真的。

如果表达式与1而不是false结合使用,可以将其转换为&

| = (0 & 1) & (1 & 1)

AND的真实表:

false

OR的真实表:

+---------------+---------+
|  A    +   B   |   A & B |
+---------------+---------+
| 0     |   0   |    0    |
| 0     |   1   |    0    | 
| 1     |   0   |    0    |
| 1     |   1   |    1    |
+---------------+---------+

但是,由于C99,+---------------+---------+ | A + B | A | B | +---------------+---------+ | 0 | 0 | 0 | | 0 | 1 | 1 | | 1 | 0 | 1 | | 1 | 1 | 1 | +---------------+---------+ true是保留字,并且会在内部评估为false0 - 上面发布的答案适用于C99以及C89

答案 2 :(得分:-1)

感谢大家的投入。真的很有帮助。

int logicalCheck (int a, int x, int b) {

// let 88 = true
//  let 89 = false

if (x == '&') {
    if (a == b) {
        return 88;
    }
    if (a != b) {
        return 89;
    }

}

if (x == '|') {
    if ((a == b && a) || b != 0) {
        return 88;
    }
    if (a || b == 0) {
        return 89;
    }

}

return 0;