很抱歉问你们,而不是我的教授。 (它应该在几个小时内到期而且她不可用) 但我只想找到正确方向的一点。
今晚我写的一件事说明了两件事......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
我的伪逻辑是接受'&'的输入或'|'并将它作为'&&'返回或'||'并根据输入的表达式将它们全部重新组合在一起,让程序进行数学计算。
但我不明白是什么会使上述表达式变为真实?或者是假的?我应该研究什么来更多地关注上述表达?什么使它成为真或假?
答案 0 :(得分:2)
这样看:
(0 & 1) | (1 & 1)
= (0 and 1) or (1 and 1)
= (false and true) or (true and true)
= (false) or (true)
= true
答案 1 :(得分:2)
C中true
和false
的概念是0
的整数false
和true
的非零数字。
“{1}},&
,|
和~
等”单一“布尔运算符称为按位运算符。
他们分别按照逻辑表 - 一个或多个,一个补充(不)和异或一个一个接一个地处理两个数字。
所以,你的表达:
^
为真,因为(0 & 1) | (1 & 1)
= 0 & 1
,0
= 1 & 1
且1
为0 | 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
是保留字,并且会在内部评估为false
和0
- 上面发布的答案适用于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;