如何在位级别添加两个二进制数时忽略一个位块
How to neglect a a block of bits while adding two binary numbers at bit level
我被分配了一个位级二进制算术项目。我做了一个函数,它成功地添加了两个忽略溢出的二进制数。出于某种原因,我想通过传递一个参数来忽略数字中的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 以忽略(剪切)reg 数组中的位数
PS:我不想使用左移技术。
我假设您有信心可以纠正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);
}
相关文章:
- visual在c++中将十进制数转换为二进制数
- 二进制数之和(使用C样式字符串)
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- std::transform 将一个结构数组复制到另一个结构数组
- 给定一个单词数组和一个字符串,如何计算给定字符串中的所有单词
- 以 10 c++ 为基数显示 1024 位二进制数
- 二进制数和位标志'x'
- 在 c 中给定一个固定数的情况下,找到所有可能的加法和组合(给定一个总和,找到它的可能的加法和排列
- C++ 二进制数到整数值的数组
- Atmel Studio:返回一个包含数组的寄存器
- 构造一个包含二进制数组的十六进制值的字符串
- 给出两个二进制数,将一个子集从一个复制到另一个
- 获取下一个非连续的二进制数
- 找出(在c++中)二进制数是否是另一个二进制数的前缀
- 我有一个字符数组,我想把它的二进制位向右移动一个
- 用一个阈值比较两个二进制数组(近似匹配)
- 拆分一个二进制数字符串,并将其存储在c++中的int类型数组中
- 将一个字符数组转换为十六进制二进制格式