【问题标题】:What kind of BASIC is this?这是一个什么样的 BASIC?
【发布时间】:2014-12-20 01:09:58
【问题描述】:

我完全期待投票,但这让我很好奇,我希望至少有人可以回答。我们的离散数学教授非常喜欢旧语言,因为它们提供了大量的位运算符。现在,他给了我们一个作业,确定以下 BASIC 语句的输出:

PRINT (NOT (15 OR 51) EQV 85) IMP (15 AND 51)

我已经解决了它,我很确定它应该输出 -105,但我想编译它只是为了确保。然后我发现我遇到了一个问题。我不知道这是什么 BASIC!原始 BASIC 语言的编译器无法编译它。 QBasic 编译器无法编译它。 VB.NET 编译器无法编译它,即使我将其修改为我认为应该是 VB.NET 的语法,如下所示:

Console.WriteLine((NOT (15 OR 51) EQV 85) IMP (15 AND 51))

问题是:是否有某种 BASIC 或方言可以编译带有此语句的程序?如果是,是哪个?

【问题讨论】:

  • 据我所知,如果 X 为真且 Y 为假,则 EQV() 等于 NOT(XOR()) 并且 IMP(X,Y) 等于 0。

标签: bitwise-operators basic qbasic


【解决方案1】:

因此,从您的方程式中删除 EQV 和 IMP,并将其重新构建为:

REM modify boolean values:

PRINT (NOT (15 OR 51) EQV 85) IMP (15 AND 51)

REM removing EQV and IMP:

PRINT NOT (NOT (NOT (15 OR 51) XOR 85) AND NOT (15 AND 51))

解决您的问题。

【讨论】:

    【解决方案2】:

    BASIC 布尔真值表示例:

    X EQV Y  Computes not xor
    X IMP Y  Computes not(x and not y)
    
      Boolean truth tables:
    
          X | Not               X |  Y  |  Or         X |  Y  |  And
      -----------           -----------------     ------------------
          1 |  0                1 |  1  |  1          1 |  1  |   1
          0 |  1                1 |  0  |  1          1 |  0  |   0
                                0 |  1  |  1          0 |  1  |   0
                                0 |  0  |  0          0 |  0  |   0
    
          X |  Y  |  Xor        X |  Y  |  Imp        X |  Y  |  Eqv
      ------------------    ------------------    ------------------
          1 |  1  |   0         1 |  1  |   1         1 |  1  |   1
          1 |  0  |   1         1 |  0  |   0         1 |  0  |   0
          0 |  1  |   1         0 |  1  |   1         0 |  1  |   0
          0 |  0  |   0         0 |  0  |   1         0 |  0  |   1
    

    【讨论】:

    • 似乎 IMP(X,Y) 等于 NOT(X AND NOT Y)
    【解决方案3】:

    额外的布尔真值表:

    Where NOR is NOT OR, NON is NOT IMP, XAN is NOT AND
    
          X |  Y  |  Nor        X |  Y  |  Non        X |  Y  |  Xan
      ------------------    ------------------    ------------------
         -1 | -1  |   0        -1 | -1  |   0        -1 | -1  |   0
         -1 |  0  |   0        -1 |  0  |  -1        -1 |  0  |  -1
          0 | -1  |   0         0 | -1  |   0         0 | -1  |  -1
          0 |  0  |  -1         0 |  0  |   0         0 |  0  |  -1
    

    【讨论】:

      【解决方案4】:

      也许您的教授专门以这种形式提供了这个问题,作为分析解决问题的挑战,而不是通过将代码输入编译器。这不是一个复杂的表达式。

      EQV 都不是 也不是IMP 不再支持 BASIC 功能(MS 总是向后兼容!)。

      要验证您的答案,您应该使用函数定义并手动求解。

      如果做不到这一点,有趣的是,VBA 仍然支持它。您可以在大多数 MS Office 套件应用程序中找到 VBA。

      【讨论】:

        【解决方案5】:

        这适用于“原始”Microsoft Visual Basic。 VB.NET 版本并不完全兼容。

        您可以尝试此操作的最简单方法是使用 Visual Basic for Applications,您可以在 Microsoft Office 中找到它。实际上,表达式的计算结果为-105。我已经在 Excel 中使用了这段代码:

        Cells(1, 1).Value = (Not (15 Or 51) Eqv 85) Imp (15 And 51)
        

        可能还有其他基本方言可以正常工作 - PowerBASIC 可能是其中之一,但我无法真正检查:)

        在不了解老师背景的情况下识别确切的方言很棘手 - 有很多,而且很多都非常相似。

        【讨论】:

          【解决方案6】:

          这对我来说似乎是一种 VBA 语法。

          也许你可以在 MS-Excel 宏中尝试一下。

          Sub VBA_Function()
              Dim x
              x = (Not (15 Or 51) Eqv 85) Imp (15 And 51)
              Range("A1").Value = x
          End Sub
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-01-07
            • 1970-01-01
            • 2015-04-30
            • 2014-10-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-29
            相关资源
            最近更新 更多