Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 添加两个无符号字符_C++_C_Char_Unsigned - Fatal编程技术网

C++ 添加两个无符号字符

C++ 添加两个无符号字符,c++,c,char,unsigned,C++,C,Char,Unsigned,我有一个任务,使用移位法添加两个无符号字符。 s是总结,p是“溢出”,我不知道怎么说。这是我的代码,有点问题,它总是打印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

我有一个任务,使用移位法添加两个无符号字符。 s是总结,p是“溢出”,我不知道怎么说。这是我的代码,有点问题,它总是打印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;
}
unsigned char get_位(unsigned char x,int i){
返回(x>>i)&1;
}
void set_位(无符号字符*x,整数i,无符号字符b){

*x=(b首先,缺少m==3的情况(当两个位都是1,进位都是1)


第二,将答案存储在s中,然后用从未设置过的k值覆盖它,因此最后得到0。或者删除行
*s=(无符号字符)k;
,或者将
set_位(s,i,m);
更改为
set_位(&k,i,m);
更好的做法是
*x=*x&~(1谢谢你们,对不起,若这个问题听起来很愚蠢,我只是一个初学者:)你们的代码中使用了
k
吗?而且增加空间有助于更容易阅读,而不是扼杀你们,你们为什么要避免使用它?