这是什么样的BASIC?

时间:2014-10-24 08:04:08

标签: bitwise-operators basic qbasic

我完全期待downvotes,但这让我很好奇,我希望至少有人可以回答。我们的离散数学教授非常喜欢旧语言,因为他们提供了大量的按位运算符。现在,他给我们做了一个功课,确定以下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的排序或方言,其中具有此语句的程序可以编译?如果是的话,哪个?

6 个答案:

答案 0 :(得分:3)

这适用于"原创" 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可能就是其中之一,但我无法真正检查:)

在不知道老师的背景的情况下识别确切的方言很棘手 - 其中很多都是非常相似的。

答案 1 :(得分:1)

对我来说,它似乎是 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

答案 2 :(得分:1)

也许你的教授在这种形式中特别提出了一个问题,即分析解决问题,而不是将代码输入编译器。这不是一个复杂的表达。

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

其他布尔真值表:

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

答案 5 :(得分:0)

因此,从方程式中删除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))

解决了您的问题。