添加两个未签名的字符

时间:2013-10-31 13:38:34

标签: c++ c char unsigned

我有使用shift添加两个无符号字符的赋值。 s是摘要,p是“溢出”我不知道怎么说。这是我的代码,出了点问题,它总是打印0 0

unsigned char get_bit(unsigned char x, int i){
    return (x>>i)&1;
}

void set_bit(unsigned char *x, int i, unsigned char b){
    *x=(b<<i)|(*x&~(1<<i));
}

void f(unsigned char x, unsigned char y, unsigned char *s, unsigned char *p){
    int i;
    unsigned char k=0,c=0;

    for(i=0;i<8;i++){
        unsigned char m=0;
        m=get_bit(x,i)+get_bit(y,i)+c;

        if(m==2) {
            m=0;
            c=1;
        }
        else c=0;
        set_bit(s,i,m);
    }
    *s=(unsigned char)k;
    *p=(unsigned char)c;
}

1 个答案:

答案 0 :(得分:1)

首先,你错过了m == 3的情况(当两个位都是1且进位为1时)。

其次,你将答案存储在s中,然后用永远不会设置的k值覆盖它,所以最后得到0。删除行*s=(unsigned char)k;或将set_bit(s,i,m);更改为set_bit(&k,i,m);