很抱歉问你们,而不是我的教授。 (几小时后到期,她不在家)但我只是在寻找正确方向的观点。
我今晚写的一篇陈述了两件事...
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中true
和false
的概念对于0
是整数false
,对于true
是非零数。
“单个”布尔运算符,例如&
,|
,~
和^
被称为按位运算符。
[它们按逻辑依次逐个处理两个数字-AND,OR,ONE-COMPLEMENT(not)和XOR。
所以,你的表情:
(0 & 1) | (1 & 1)
为真,因为0 & 1
= 0
,1 & 1
= 1
,并且0 | 1
为1
。没错
如果将表达式与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,true
和false
是保留字,并且在内部将计算为0
和1
-上面发布的答案适用于C99和C89
以这种方式看:
(0 & 1) | (1 & 1)
= (0 and 1) or (1 and 1)
= (false and true) or (true and true)
= (false) or (true)
= true
感谢大家的投入。真的有帮助。
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;