我被分配了一个位级别的二进制算术项目。我做了一个函数,它成功地添加了两个忽略溢出的二进制数。出于某种原因,我想通过传递一个参数来忽略数字中的 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/