如何避免使用++和 - 运算符

时间:2012-07-03 15:17:35

标签: c bit-manipulation

好的,我的代码以一种非常好用的方式完成,并使用增量++和减量运算符。

unsigned int atob(const char* input)
{

    int i = 0;

    while (input[i] == '0' || input[i] == '1') i++;

    unsigned result = 0;
    unsigned currentBit = --i;

    while ((*input == '0') || (*input == '1')) {
        char isCurrentBitSet = *input == '1';
        unsigned setValue = (isCurrentBitSet << currentBit--);
        result |= setValue;
        input++;
    }

    return result;
}

现在,我需要除掉while语句底部的输入++之外的所有dec( - )/ inc(++)。我对如何实施这个实施感到困惑。

5 个答案:

答案 0 :(得分:4)

你走了:

unsigned int atob(const char* input)
{
  unsigned result = 0;

  while ((*input == '0') || (*input == '1')) {
    result = (result << 1) | (*input++ - '0');
  }

  return result;
}

也节省了一些堆栈空间:)

答案 1 :(得分:2)

通常的方法是从结果集开始为0.然后对于每个输入字符,将结果在当前位中移位一位or,然后重复直到输入结束无论如何,字符串(或01以外的其他内容。)

答案 2 :(得分:1)

决定彻底改变我的解决方案:

unsigned int atob(const char* input)
{
    unsigned val; 

    for (val = 0; *input; input++) {
        if (*input == '1') val = (val << 1) | 1;
        else if (*input == '0' ) val <<= 1;
        else break;
    }

    return val;
}

答案 3 :(得分:0)

用i = i + 1替换i ++?这似乎很容易。

答案 4 :(得分:-1)

考虑通过调用strtol

来替换整个函数