给定任何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的高位,这会将数字从负变为正。 – 2013-05-02 11:28:23
@Étienne我认为溢出是数字不适合字节大小。所以例如,如果我乘以120 * 2使用8位整数这将导致溢出。如我错了请纠正我。我终于知道为什么数字会从负数变为正数(如果输入的是负数),但仍然无法理解负数的溢出原因(-1 ...- 128) – 2013-05-02 11:40:24