家庭作业:试图弄清我要计算C的什么操作[关闭]

问题描述 投票:-2回答:3

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

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

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

我的伪逻辑是接受'&'或'|'的输入并将其返回为“ &&”或“ ||”然后根据输入的表达式将它们放回去,然后让程序进行数学运算。

但是我不明白的是,什么会使上述表达变为真实?和还是假?我应该研究什么以使上述表达更多地依赖于?是什么使它正确或错误?

c bit-manipulation boolean-logic control-flow
3个回答
2
投票

C中truefalse的概念对于0是整数false,对于true是非零数。

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

[它们按逻辑依次逐个处理两个数字-AND,OR,ONE-COMPLEMENT(not)和XOR。

所以,你的表情:

(0 & 1) | (1 & 1)为真,因为0 & 1 = 01 & 1 = 1,并且0 | 11。没错

如果将表达式与false而不是&组合在一起,就会变成|

[(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,truefalse是保留字,并且在内部将计算为01-上面发布的答案适用于C99和C89


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
投票

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

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;
© www.soinside.com 2019 - 2024. All rights reserved.