两个数相减,若没有发生借/进位,C 标志一定为 1,这句话对吗?
不对。
两个数相减,只能:“有没有发生借位”,哪能“进位”?
。
另外,进位、溢出,是两个不同的概念,两者并无关系。
CY(Carry)在单片机里是进位标志。CY=0是无溢出,CY=1有溢出。用于表示加法进算中的进位和减法运算中的借位,加法运算中有进位或减法运算中有借位则CY位置1,否则为0。对无符号数的运算,判断只需CY即可,对于无符号数的运算,CY位就可以表示其是否溢出。但如果是有符号数,则不能按CY标志来判断了。
例题:对于16位运算器,65534 + 3,本该得65537,但因为寄存器只有16位,最高位的那个1丢掉了(进入了CY标志)。结果寄存器中只剩下了1。此时,我们可以说,16位的无符号数加法,65534+3溢出了,溢出后的答案成了1。
但是对于有符号整数,情况就不同了。有符号整数采用补码表示法。16位有符号整数不可能表示65534,此时如果机内二进制是1111111111111110,程序中认为它是-2,故:机内的二进制的1111111111111110 + 0000000000000011,代表的是(-2) + 3。请注意,此时的(-2)+3和上文的无符号数65534+3,在CPU的运算器硬件上完全相同,都是得到和为1,而CY标志也为1。但是,有符号数(-2)+3=1并无溢出。故此时的CY标志不能代表它溢出了。
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)