【发布时间】:2013-05-02 22:26:42
【问题描述】:
给定任何 8 位负整数(符号介于 -1 和 -128 之间),HLA 中的右移会导致溢出,我不明白为什么。如果移动一次,它基本上应该将该值除以 2。这对于正数是正确的,但对于负数显然不是。为什么?例如,如果输入 -10,则结果为 +123。
Program cpy;
#include ("stdlib.hhf")
#include ("hla.hhf")
static
i:int8;
begin cpy;
stdout.put("Enter value to divide by 2: ");
stdin.geti8();
mov(al,i);
shr(1,i); //shift bits one position right
if(@o)then // if overlow
stdout.put("overflow");
endif;
end cpy;
【问题讨论】:
-
我找到了答案。如果将 0 移动到先前包含 1 的高位,这会将数字从负数变为正数。
-
@Étienne 我认为溢出是数字不适合字节大小。因此,例如,如果我使用 8 位整数乘以 120*2,这将导致溢出。如我错了请纠正我。我终于知道为什么数字会从负数变为正数(如果输入负数)但仍然无法理解负数的溢出原因(-1...-128)
标签: bit-manipulation hla