-2

很抱歉问你们,而不是我的教授。(几个小时后到期,她不在)但我只是在寻找正确方向的一点。

我今晚写的一篇文章陈述了两件事......

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

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

但我不明白的是什么会使上述表达式 evaulwate 为真?还是假的?我应该研究什么来更多地了解上述表达式?是什么让它对或错?

4

3 回答 3

2

这样看:

(0 & 1) | (1 & 1)

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

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

= (false) or (true)

= true

在维基百科进一步阅读

于 2013-03-17T04:54:33.747 回答
2

trueC 中的and的概念false是整数0forfalse和非零数 for true

“单个”布尔运算符,如,&和称为按位运算符。|~^

它们逐位处理两个数字 - 分别遵循逻辑表 - AND,OR,ONE-COMPLEMENT(not)和XOR。

所以,你的表达:

(0 & 1) | (1 & 1)是真的,因为0 & 1= 0, 1 & 1=1并且0 | 11. 这是真的。

false如果表达式与 an&而不是这样的组合,则可能会变成|这样:

(0 & 1) & (1 & 1)= false

AND的真值表:

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

OR的真值表:

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

但是,由于 C99,trueand是保留字,并且false将在内部评估 - 上面发布的答案适用于 C99 以及 C8901

于 2013-03-17T04:56:42.857 回答
-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;
于 2013-03-17T05:09:56.640 回答