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
相关产品推荐
相关产品推荐

