0

シフトを使用して2つの符号なし文字を追加する割り当てがあります。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;
}
4

1 に答える 1

1

まず、m == 3 の場合 (両方のビットが 1 で、キャリーが 1 の場合) がありません。

次に、答えをsに保存し、設定されていないkの値で上書きするため、最後に0になります。行を削除するか、に*s=(unsigned char)k;変更set_bit(s,i,m);しますset_bit(&k,i,m);

于 2013-10-31T13:47:06.863 に答える