給定任何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