【问题标题】:Translating C numerical operators to Java Boolean operators将 C 数值运算符转换为 Java 布尔运算符
【发布时间】:2021-02-17 13:23:43
【问题描述】:

我有以下 C 代码。我想写一个 Java 版本的 C 条件,但我不知道 C 数值运算符在 if 语句中代表什么布尔运算符。

C代码是:

if ( (n >= 1) * (n < 10) + (n == 0) )
{
     printf("A\n");
}
else
{
     printf("B\n");
    }

    return 0;

* 和 + 转换成什么布尔运算符?

【问题讨论】:

  • 我不得不问:这是一个测验还是有人真的在生产代码中加入了类似的东西?
  • 每次比较的结果是 0 或 1。如果将这些数字放在表达式中,您可以将 */+ 的行为与逻辑 AND/OR 操作进行比较。
  • C 关系和逻辑表达式在满足运算符条件时计算为 1,在不满足时计算为 0。
  • 如果这是某种测验问题,正确答案是“没有答案是可能的”。 n 的类型尚未指定,因此无法确定 C 代码是否可以翻译成 Java。例如,如果n 是一个指针怎么办? Java 中甚至不存在指针。
  • @FedericoklezCulloca 是的,这是一个测验问题的一部分,但我不是要求解决问题,这只是过程的一部分,所以我可以自己获得解决方案。

标签: java c logical-operators boolean-expression


【解决方案1】:

您可以通过查看他们的真值表来解决这个问题。 请记住,在 C 中,0false,任何其他值(包括 1)都是 true

 *  | 0 | 1      +  | 0 | 1
    |   |           |   |
 ---+---+--      ---+---+--
 0  | 0 | 0      0  | 0 | 1
 ---+---+--      ---+---+--
 1  | 0 | 1      1  | 1 | 2

如果这是一个家庭作业问题,我会把剩下的留给你。 如果您需要更多提示,请谷歌“布尔运算真值表”。

【讨论】:

  • 这个答案所说的一切都是正确的,但它对这个问题没有反应。特别是“任何其他值 [...] 为真”对 OP 的目的没有帮助。
  • @JohnBollinger 我添加了该声明以明确1 + 1 = 2 仍然正确。如果您能想到更好的表达方式,请随时编辑答案。
【解决方案2】:

只需将 * 替换为 && (AND) 并将 + 替换为 || (或)。

【讨论】:

    猜你喜欢
    • 2013-03-02
    • 2011-11-27
    • 1970-01-01
    • 2011-04-20
    • 2012-09-20
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 2014-09-09
    相关资源
    最近更新 更多