关于单片机汇编求补的疑问?
假设A中存有一个负数;因此求补码如下CPLA(按位取反)INCA(自加1)。按补码的定义;补码=反码+1按上述指令则补码=逐位取反+1可是“取反码"和“逐位取反”也不是一...
假设A中存有一个负数;
因此求补码如下 CPL A (按位取反)
INC A (自加1)。
按补码的定义;补码=反码+1
按上述指令 则 补码=逐位取反+1
可是 “取反码" 和 “逐位取反”也不是一回事啊(符号位变化) 请高手解释 展开
因此求补码如下 CPL A (按位取反)
INC A (自加1)。
按补码的定义;补码=反码+1
按上述指令 则 补码=逐位取反+1
可是 “取反码" 和 “逐位取反”也不是一回事啊(符号位变化) 请高手解释 展开
1个回答
展开全部
首先要注意,只有负数需要计算补码,正数的原码反码补码都是一样的。
其次,这里你有个误解,负数的补码是其绝对值取反后,再将其最高位置1,然后加一即可。(注意,因为负数的绝对值的最高位肯定是0,取反后本来就是1,因此第二步最高位置1其实是不必要的,这里指出来,只是为了系统的说清楚补码的运算过程)
例如,-7的单字节补码计算为:
-7的二进制是10000111
7的二进制是00000111
按位取反:11111000
+1:11111001
这个就是-7的补码了。
也就是说,你这个程序前面还少了一部分,
即判断该数是否是负数,即最高位是否是1。
然后如果是负数,要首先将最高位置0
然后就可以用你这两句来计算了。
对了,补充一点,对于一定字节数的整数来说,其最大负数是没有原码和反码的,补码直接是最高位1,其他全0。
例如:对于单字节来说,-128的补码是10000000
其次,这里你有个误解,负数的补码是其绝对值取反后,再将其最高位置1,然后加一即可。(注意,因为负数的绝对值的最高位肯定是0,取反后本来就是1,因此第二步最高位置1其实是不必要的,这里指出来,只是为了系统的说清楚补码的运算过程)
例如,-7的单字节补码计算为:
-7的二进制是10000111
7的二进制是00000111
按位取反:11111000
+1:11111001
这个就是-7的补码了。
也就是说,你这个程序前面还少了一部分,
即判断该数是否是负数,即最高位是否是1。
然后如果是负数,要首先将最高位置0
然后就可以用你这两句来计算了。
对了,补充一点,对于一定字节数的整数来说,其最大负数是没有原码和反码的,补码直接是最高位1,其他全0。
例如:对于单字节来说,-128的补码是10000000
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询