再次向大家问好,
我需要用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.
for
循环限制是包含在内的。
这样就形成了一个循环
for x := 1 to 1 do
begin
writeLn(x)
end
打印一行包含 1
。
这种情况可能是受到数学家的和与积符号 Σ 和 ∏ 的启发,它也使用包含极限。