对于减法运算,由于无进位考虑,较为简单这里就不列举
下面是加法运算:
#include <iostream>
using namespace std;
unsigned char carry_judge(unsigned char *op1, unsigned char *op2, unsigned char r)
{
unsigned char x1, x2,x3;
x1 = op1[1];
x2 = op2[1];
x3 = r;
x1 >>=7;
x2 >>= 7;
x3 >>= 7;
if ((x1 == 1 && x2 == 1)|| (x1 == 1 && x2 == 0 && x3 == 0)|| (x2 == 1 && x1 == 0 && x3 == 0)) return 0b00000001;
else return 0b00000000;
}
int main()
{
unsigned char op1[2] = { 0b01110110,0b10111100 };
unsigned char op2[2] = { 0b01111110,0b11100011 };
unsigned char result[2],c;
result[1] = op1[1] + op2[1];
c = carry_judge(op1, op2, result[1]);
result[0] = op1[0] + op2[0] + c;
}
原理:关键在低八位是否进位,对于低八位的最高位,若二者均为1则必进位,若均为0则必不进位,关键讨论一个0一个1的情况,对二者低八位相加的结果进行判断,若相加结果的最高位为0,则发生进位,若为1,则未发生进位
注意,类型要定义为unsigned char,若为char类型,由于c不支持逻辑右移,而算术右移(>>)会导致在高位填1,发生错误。