C++和溢出位中的二进制数之和
Sum of binary numbers in C++ and overflow bit?
>我需要帮助添加以"位"连接的 16 位。每次连接一组 16 位时,我希望将它们添加到数组中(二进制加法)......直到所有 16 组都在我的字符串中完成。如果存在溢出,则最终总和的长度>16...然后将该额外位作为0000000000000001添加到最终总和中(其中1是第16位)。
对于输入的字符串:"hello"
std::vector<std::string> bitvec;
std::string bits;
for (int i = 0; i < s.size(); i += 2) {
bits = std::bitset<8>(s[i]).to_string() + std::bitset<8>(s[i + 1]).to_string();
bitvec.push_back(bits);
}
可能的问题:
如果s
成立 "hello"
,则std::bitset<8>(s[i])
将为 0。 您需要将仅包含"1"和"0"的字符串传递给位集构造函数
正确初始化位集后,就不能使用 to_string()
函数将它们加在一起,那只会连接表示形式:"1011" + "1100"
将变得"10111100"
哦,等等,也许这就是你想要的。
听起来您正在发明一种复杂的方法来对解释为 16 位数字的 ascii 值对求和,但目前尚不清楚。 您的代码大致等效于以下内容:
std::vector<uint16_t> bitvec;
unsigned char* cp = s.c_str()+1;
while (*cp) {
uint16_t bits = *(cp-1)>>8 + *(cp);
bitvec.push_back(bits);
}
//sum over the numbers contained in bitvec here?
uint32_t sum=0;
for(std::vector<int16_t>::iterator j=bitvec.begin();j!=bitvec.end();++j) {
sum += *j;
uint16_t overflow = sum>>16; //capture the overflow bit, move it back to lsb
sum &= (1<<16)-1; //clear the overflow
sum += overflow; //add it back as lsb
}
相关文章:
- visual在c++中将十进制数转换为二进制数
- 二进制数之和(使用C样式字符串)
- 如何在C ++中将二进制字符串128位转换为十进制字符串?
- 以 10 c++ 为基数显示 1024 位二进制数
- 二进制数和位标志'x'
- C++ 二进制数到整数值的数组
- 二进制数组中最大连续 1 的起始和结束索引,以 C++ 为单位
- dev如何在C++中比较二进制数
- 递归回溯打印长度为N的二进制数的所有组合,而不使用循环
- 使用位黑客反转二进制数
- 在 int 数组中打印出位
- 对C++中二进制数的1中设置的位进行计数
- C++和溢出位中的二进制数之和
- C++找到二进制数的最高有效位
- 如何使用 testBit 函数检查二进制数组中的特定索引位
- 给出两个二进制数,将一个子集从一个复制到另一个
- 比较两个二进制数,得到不同的位
- 找出(在c++中)二进制数是否是另一个二进制数的前缀
- 位操作-使用逐位生成二进制数(C++)
- 在c++数组中存储3位二进制数