Dev*_*rgo 4 delphi byte integer negative-number
我测试了一些代码:
var
B: Byte;
I: Integer;
begin
I := -10;
B := I;
end;
Run Code Online (Sandbox Code Playgroud)
我期望在数字 10 的变量中看到结果(因为这是 integer 类型的低字节)。但结果是 B => 246。
从逻辑上讲,我明白 246 = 256 - 10,但我不明白为什么会发生这种情况?
您对值为 -10 的整数的最低有效 (ls) 字节的值 10 的预期不正确。
负数根据称为2 的补码的系统进行编码,其中 -1 作为四字节整数的值被编码为 $FFFFFFFF,-2 作为 $FFFFFFFE,-3 作为 $FFFFFFFD ... -10 作为 $FFFFFFF6 ...等等。这是目前大多数计算机/软件使用的系统。
还有其他系统。您可能想到的是一种称为“有符号幅度”的系统(请参阅: https: //en.wikipedia.org/wiki/Signed_number_representations),其中最高有效位在设置时表示负值,而实际数字被编码为对于负数和正数都是相同的(定义两个零值 +0 和 -0 带来不便)。