C++ 添加两个无符号字符
我有一个任务,使用移位法添加两个无符号字符。 s是总结,p是“溢出”,我不知道怎么说。这是我的代码,有点问题,它总是打印0C++ 添加两个无符号字符,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
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
吗?而且增加空间有助于更容易阅读,而不是扼杀你们,你们为什么要避免使用它?