提问人:KarolC 提问时间:10/6/2023 更新时间:10/11/2023 访问量:88
旧帕斯卡代码中十六进制数之和的条件
Condition as sum of hexadecimal numbers in old Pascal code
问:
我有一个非常古老的 Pascal 程序。单元顶部是一组常量,如下所示:
feature1 = $01;
feature2 = $02;
feature3 = $04;
feature4 = $08;
feature5 = $10;
在数据库中,有一列表示属性,并且有上述特征组合的总和。我认为它可能非常有用,即使在今天,它也可以让我们避免复杂的问题 条件块,但我想阅读更多关于它的信息,并查看此类代码的更多解释良好的示例。因此,如果您之前看到类似的东西,我将不胜感激地提供指向某些文章和摘录的链接,因为我甚至不知道我必须在 Google 中搜索什么。
答:
0赞
Scooter
10/11/2023
#1
下面是一个使用 Free Pascal 中的常量的示例
Program HexConstants;
Const
(* In Pascal a hexadecimal numeric literal is indicated by
prefixing a numeric literal with a $ *)
feature1 = $01;
feature2 = $02;
feature3 = $04;
feature4 = $08;
feature5 = $10;
Var
features : integer;
procedure PrintFeatureDecimalValues();
begin
Writeln(' feature1 = ', feature1);
Writeln(' feature2 = ', feature2);
Writeln(' feature3 = ', feature3);
Writeln(' feature4 = ', feature4);
Writeln(' feature5 = ', feature5);
Writeln('__________________________________');
end;
procedure ShowFeaturesThatAreSet(features : integer);
begin
if features = 0 then
Writeln('No features are set');
(* bitwise **and** to see if feature<n> bit is set *)
if features and feature1 <> 0 then
Writeln('Feature 1 is set');
if features and feature2 <> 0 then
Writeln('Feature 2 is set');
if features and feature3 <> 0 then
Writeln('Feature 3 is set');
if features and feature4 <> 0 then
Writeln('Feature 4 is set');
if features and feature5 <> 0 then
Writeln('Feature 5 is set');
Writeln('__________________________________');
end;
Begin
PrintFeatureDecimalValues;
features := feature1 + feature3;
ShowFeaturesThatAreSet(features);
features := feature4 + feature5;
ShowFeaturesThatAreSet(features);
features := 0;
ShowFeaturesThatAreSet(features);
features := feature1 + feature2 + feature3 + feature4 + feature5;
ShowFeaturesThatAreSet(features);
(* adding to an already set feature *)
features := feature2;
features := features or feature4; (* adding feature4 *)
ShowFeaturesThatAreSet(features);
End.
输出:
feature1 = 1
feature2 = 2
feature3 = 4
feature4 = 8
feature5 = 16
__________________________________
Feature 1 is set
Feature 3 is set
__________________________________
Feature 4 is set
Feature 5 is set
__________________________________
No features are set
__________________________________
Feature 1 is set
Feature 2 is set
Feature 3 is set
Feature 4 is set
Feature 5 is set
__________________________________
Feature 2 is set
Feature 4 is set
__________________________________
上一个:Pascal 上的非法表达
评论
and
if Value and feature2 <> 0 then ... (feature bit 2 was set)
SET OF