为什么我只告诉它写 15,输出却是 16 位?

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

再次向大家问好,

我需要用Pascal编写一段代码,将十进制数转换为二进制数,并将其保存到数组中,然后将其从MSD写入LSD。

我已经有了大部分代码,但是当我想打印它时,我不明白一件重要的事情:

我放了代码片段

FOR i := 15 DOWNTO 1 DO
write(Integer(dualCalc[i]));

作为输出。当我运行这个程序时,我得到数字 0000000000001010 作为输出,这是正确的,也是 16 位。如何? 15 DOWNTO 1 只有15位,那怎么输出16位呢?

当我放

FOR i := 15 DOWNTO 0 DO
write(Integer(dualCalc[i]));

我得到 00000000000010100,这是错误的,是 17 位。

有人可以向我解释一下这怎么可能吗?

下面是整个代码。

PROGRAM ConvertNum;


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


PROCEDURE Dec2Dual (decimal: INTEGER; VAR dualCalc: dual); 

VAR


i: INTEGER;
calculation: INTEGER;
divisionBool: BOOLEAN;


BEGIN

i := 0;    


WHILE (i < 16) AND (decimal > 0) DO
    BEGIN
        calculation := decimal mod 2;
            IF calculation = 0 THEN
            divisionBool := FALSE
            ELSE
            divisionBool := TRUE;
        dualCalc[i] := divisionBool;
        decimal := decimal div 2;
        i := i + 1;
    END;


FOR i := 15 DOWNTO 0 DO
write(Integer(dualCalc[i]));


END;

VAR

aThree: ARRAY[0..15] OF BOOLEAN;
inputVar: INTEGER;
DecOut: INTEGER;

BEGIN

readln(inputVar);

Dec2Dual(inputVar, aThree);

END.
pascal freepascal
1个回答
0
投票
  • 在 Pascal 中
    for
    循环限制是包含在内的。 这样就形成了一个循环
    for x := 1 to 1 do
    begin
        writeLn(x)
    end
    
    打印一行包含
    1
    。 这种情况可能是受到数学家的和与积符号 Σ 和 ∏ 的启发,它也使用包含极限。
© www.soinside.com 2019 - 2024. All rights reserved.