c++ - 如何在位级添加两个二进制数时忽略一个位 block

标签 c++

我被分配了一个位级别的二进制算术项目。我做了一个函数,它成功地添加了两个忽略溢出的二进制数。出于某种原因,我想通过传递一个参数来忽略数字中的 n 位来使其更加灵活。

例如,我想忽略a的最右边的两位并将其添加到b。

         a=111011

         b= 101         
        +---------
          1001111

这是我的函数定义。

void add( bool reg[], bool arr[], int sizereg, int sizearr, int cut)

{
int i=sizereg-1-cut;
int j=sizereg-sizearr;

bool  carry=0,dummy;



for (i; i>=j-cut ; i--)
  {

     dummy=reg[i]; 
     reg[i]= (!reg[i]) && (arr[i-j] !=carry) || reg[i] && (arr[i-j]==carry);
     carry=(arr[i-j] &&dummy) || (dummy&&carry) || (arr[i-j]&&carry);
  }

while (carry && (i+1))

{     
    dummy=reg[i];
    reg[i]=(carry!=reg[i]);
    carry=(carry==dummy);
    i--;
}

我的程序适用于 cut=0,对于 cut 的非零值,它不会给出所需的结果。如何正确使用 cut 以忽略(剪切)reg 数组中的位数

PS:我不想使用 Leftshift 技术。

最佳答案

我假设您有信心可以纠正 cut 为 0 的 add() 版本。然后,您可以编写两个函数。第一个函数只是实现 add() 假设 cut 为 0。

// Add reg and arr (cut is 0)
void add( bool reg[], bool arr[], int sizereg, int sizearr )
{
    //...
}

具有 cut 的第二个函数调用第一个函数,调整参数使 cut 可以被视为 0。如果 cut 在高阶索引上,您只需要减小大小。如果 cut 在低阶索引上,那么您还必须将指针前移。

// cut > 0 means cutting the higher indices.
// cut < 0 means cutting the lower indices.
void add( bool reg[], bool arr[], int sizereg, int sizearr, int cut )
{
    if (cut < 0) {
        cut = -cut;
        reg += cut;
    }
    add(reg, arr, sizereg - cut, sizearr);
}

关于c++ - 如何在位级添加两个二进制数时忽略一个位 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29660763/

相关文章:

c++ - 包含 SDL2/SDL_Image 时 SDL 包含错误

c++ - 如何使用 zlib 轻松压缩和解压缩文件?

c++ - 如何使用vector和struct?

c++ - 如何找到 USER 44 PANIC 的原因?

c++ - Boost属性树从命名数组中获取元素

java - 从中间向外遍历数组的算法?

C++ 破坏函数错误!

c++ - 动态内存的打印地址,存储在指针数组中

c++ - "this"是否也适配函数指针?

c++ - 将 csv 文件的一行拆分为 std::vector?