簡體   English   中英

添加兩個未簽名的字符

[英]adding two unsigned chars

我有分配要使用平移添加兩個未簽名的字符。 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;
}

首先,您會錯過m == 3的情況(當兩個位均為1且進位為1時)。

其次,您將答案存儲在s中,然后用從未設置的k值覆蓋它,因此最后得到0。 要么刪除行*s=(unsigned char)k; 或更改set_bit(s,i,m); set_bit(&k,i,m);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM