这是什么原因造成的?错误:不兼容的类型:得到“Boolean”,期望“LongInt”

问题描述 投票:0回答:1

我正在为作业编写代码,但是,编译器总是为我提供以下过程错误。老实说,我不知道它出了什么问题,我找不到错误。我不知道为什么它给我这个错误。有人有什么想法吗?

convertNumbers.pas(21,14) 错误:不兼容的类型:得到“Boolean”,期望“LongInt”

convertNumbers.pas(42,4) 致命:编译模块时出现 1 个错误,正在停止

PROGRAM convertNumbers;

TYPE
  aDual = ARRAY[0..15] OF BOOLEAN;

PROCEDURE Dual2Dec (iDecimal: INTEGER; VAR aDualCalc: aDual);
VAR
  iCount: INTEGER;
  bDivision: BOOLEAN;
  iCalculation: INTEGER;

BEGIN
  iCount := 0;    

  WHILE iCount < 16 AND iDecimal > 0 DO  // Error: Incompatible types: got "Boolean" expected "LongInt"
  BEGIN
    iCalculation := iDecimal mod 2;
    IF iCalculation = 0 THEN
      bDivision := FALSE
    ELSE
      bDivision := TRUE;
    aDualCalc[iCount] := bDivision;
    iDecimal := iDecimal div 2;
    iCount := iCount + 1;
  END;
END;

BEGIN

END.
pascal freepascal
1个回答
3
投票

在 Pascal 中

and
比比较运算符具有更高的优先级,因此:

WHILE iCount < 16 AND iDecimal > 0 DO

解析更像:

WHILE iCount < (16 AND iDecimal) > 0 DO

比预期的:

WHILE (iCount < 16) AND (iDecimal > 0) DO
© www.soinside.com 2019 - 2024. All rights reserved.