2

我正在将 Mac Think Pascal 上编写的旧程序转换为 Windows 上的 Pascal。Think Pascal 具有位操作功能,例如

btst(n, i : longint) : boolean
bitxor(i, j : longint) : longint
bclr(n, i : longint) : longint
bset(n, i : longint) : longint 

...和别的。如果您知道这些功能的作用,请提供帮助。

我找到了一些相关信息,例如“从传统的 Macintosh Pascal 编译器移植到 GNU Pascal”。本文档使用按位运算符(如andor和)实现位函数。但是,我不确定文档中的描述是否正确。shrshl

我知道函数的大致含义:

  • btst(n,i)如果 n 的第 i 位为 1,则为 True,否则为 False
  • bitxor(i,j)是按位“异或”
  • bclr(n, i)将 n 的第 i 位设置为 0
  • bset(n, i)将 n 的第 i 位设置为 1

但是,我不知道函数中变量的正确顺序是什么(例如btst(n,i)btst(i,n))。另外,位是如何编号的?从左到右,从0还是1开始?感谢您对这四个功能的任何帮助。

4

2 回答 2

0

(抱歉,需要更多空间)

Dev Pascal 1.9.2 在 Free Pascal 中的构建本质上是一个测试版,而且非常非常古老,并且自 2002 年以来就缺乏这些功能。但据我所知,dev-pascal 可以与较新的 FPC 一起使用。Lazarus 非常接近重新编译东西本身:_)

{$mode macpas}放在程序和/或“接口”行之后(在一个单元中)。命令行也是可能的, -Mmacpas(适用于所有由编译器调用编译的,除非在源代码中被 $mode 否决)

您命名的函数在 MacPasc 模式下受支持,但 bitxor 称为 bxor()。Afaik MacPascal 主要模拟 CodeWarrior Pascal,但由于这主要是一个超集,因此认为 afaik 通常可以正常工作。添加了一些思想。

由于 macpascal 知识相当少,您可能想要订阅 main fpc list main fpc listMac Pascal List

General Lazarus Forum也被滥用于 FPC 目的,尽管我预计那里了解旧苹果方言的人会更少。

于 2013-04-27T10:38:23.727 回答
0

位在一个字节中从 0 到 7 编号,或者在一个字中从 0 到 15 编号。位 0 是最右边的位。因此,如果位 0 为 1,所有其他位为 0,则字节或字的整数值为 1。

于 2020-10-19T02:18:56.187 回答