【问题标题】:adding two unsigned chars添加两个无符号字符
【发布时间】:2013-11-11 13:11:49
【问题描述】:

我有分配使用移位添加两个无符号字符。 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;
}

【问题讨论】:

  • 您的代码中在哪里使用了k?增加空间有助于更轻松地阅读而不是杀死你,你为什么避免使用它?

标签: c++ c char unsigned


【解决方案1】:

首先,您错过了 m == 3 的情况(当两个位均为 1 且进位为 1 时)。

其次,您将答案存储在 s 中,然后用从未设置的 k 值覆盖它,因此最后得到 0。删除*s=(unsigned char)k; 行或将set_bit(s,i,m); 更改为set_bit(&amp;k,i,m);

【讨论】:

  • 更好的是,使用*x = *x &amp; ~(1 &lt;&lt; i) | (b &lt;&lt; i) 来避免使用+-。如果你可以使用+,你也可以添加两个原始数字;)
  • 谢谢你们,如果问题听起来很愚蠢,对不起,我只是一个初学者:)
猜你喜欢
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2020-11-03
相关资源
最近更新 更多