You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pascal编译报错:类型不兼容,期望LongInt却得到Boolean求排查

Pascal编译错误分析:Dual2Dec类型不兼容问题

报错信息

convertNumbers.pas(21,14) Error: Incompatible types: got "Boolean" expected "LongInt"
convertNumbers.pas(42,4) Fatal: There were 1 errors compiling module, stopping

问题根源

错误出在Dual2Dec过程的WHILE循环条件行:

WHILE iCount < 16 AND iDecimal > 0 DO

Pascal中位运算符AND的优先级高于比较运算符<和>,编译器会将上述表达式错误解析为:

WHILE (iCount < (16 AND iDecimal)) > 0 DO

这里16 AND iDecimal是整数位运算,结果为长整型;iCount < 长整型得到布尔值,随后用这个布尔值和整数0比较,就触发了「布尔值与长整型不兼容」的编译错误。

修复方案

给两个比较表达式分别加上括号,明确逻辑运算的顺序:

WHILE (iCount < 16) AND (iDecimal > 0) DO

修复后的完整代码

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
  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.

内容的提问来源于stack exchange,提问作者Slan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:42:49