我正在将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
......和其他人。如果您知道这些功能的作用,请提供帮助。
我找到了一些相关信息,例如"Porting to GNU Pascal from traditional Macintosh Pascal compilers"。本文档使用按位运算符(如and
,or
,shr
和shl
来实现位功能。但是,我不确定文档中的描述是否正确。
我知道这些功能的近似含义:
btst(n,i)
为True,否则为bitxor(i,j)
是按位'xor'bclr(n, i)
将第n位设为0 bset(n, i)
将第n位设置为1 但是,我不知道函数中变量的正确顺序是什么(例如btst(n,i)
或btst(i,n)
)。比特是如何编号的?从左到右,从0或1开始?感谢您对这四项功能的任何帮助。
答案 0 :(得分:0)
(抱歉,需要更多空间)
Dev Pascal 1.9.2的免费Pascal版本基本上是一个测试版,非常非常古老,并且自2002年以来就缺乏这样的功能。但是dev-pascal可以用于更新的FPC,我告诉他们。 Lazarus非常接近重新编译这个东西:_)
在程序和/或"界面"之后加上 {$ mode macpas} 线(单位)。命令行也是可能的, -Mmacpas (适用于编译器调用所编译的所有内容,除非在源代码中被$ mode否决)
您在MacPasc模式下支持您命名的功能,但bitxor称为bxor()。 Afaik MacPascal主要是CodeWarrior Pascal的模型,但由于这主要是一个超集Think Afaik通常工作正常。一些思想被添加。
由于macpascal知识相当少见,您可能需要订阅主fpc列表main fpc list或Mac Pascal List。
General Lazarus Forum也被用于FPC目的,但我预计那里的老苹果方言知识人数较少。
答案 1 :(得分:0)
位在一个字节中从0到7或在一个字中从0到15编号。位0是最右边的位。因此,如果位0为1,而所有其他位为0,则字节或字的整数值为1。