добавление двух неподписанных символов

0

У меня есть назначение добавить два символа без знака, используя shifting. 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;
}
  • 0
    где k используется в вашем коде? А добавление пробела помогает легче читать, а не убивать вас, почему вы избегаете его использовать?
Теги:
char
unsigned

1 ответ

1

Ну сначала вам не хватает случая, когда m == 3 (когда оба бита равны 1, а перенос - 1).

Во-вторых, вы сохраняете свой ответ в s, а затем перезаписываете его значением k, которое никогда не устанавливается, поэтому вы получаете 0 в конце. Либо удалите строку *s=(unsigned char)k; или изменить set_bit(s,i,m); set_bit(&k,i,m);

  • 0
    Еще лучше сделать *x = *x & ~(1 << i) | (b << i) чтобы избежать использования + и - . Если бы вы могли использовать + , вы могли бы также добавить два исходных числа;)
  • 0
    спасибо, ребята, извините, если вопрос звучит глупо, я только начинающий :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню