C++ 将布尔列表转换为_int64
我有一个布尔列表,我正试图将其转换为一个整数64。布尔列表是由8个字符的字符串创建的,因此它的长度永远不会超过64个字符 我试着这样做: 我将一个const std::listC++ 将布尔列表转换为_int64,c++,list,boolean,C++,List,Boolean,我有一个布尔列表,我正试图将其转换为一个整数64。布尔列表是由8个字符的字符串创建的,因此它的长度永远不会超过64个字符 我试着这样做: 我将一个const std::list&binList传递到函数中 _int64 x = 0; for(auto citer = binList.begin();citer!=binList.end();citer++{ x*=10; if(*citer) x++; } 这显然不起作用,因为如果有一个0的列表,int永远不会变大,但我得到的输
_int64 x = 0;
for(auto citer = binList.begin();citer!=binList.end();citer++{
x*=10;
if(*citer) x++;
}
这显然不起作用,因为如果有一个0的列表,int永远不会变大,但我得到的输出甚至不包含1和0。它包含随机数。不太确定这样做的最佳方式。提前谢谢
我想举个例子,这里有一个:
清单包括:
{0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1}
当我运行该循环时,x=-38307363277776896713
如果不清楚,我希望x包含01101000001110010110001101100011111。如果要通过乘以10来移动循环中的下一个基数-10位,则应通过乘以2来移动到下一位 您的奇数结果可能是由于溢出,再加上您将其显示为以10为基数的数字而不是二进制数字 如果您的意图是将每一个10进制数字用作0或1,那么您只能以这种方式保存19位
for(auto-citer=binList.begin();citer!=binList.end();citer++){
x只需在布尔数组中迭代,并打开在布尔数组中找到的1
位
下面的程序将布尔数组转换为单个64位整数
#include<iostream>
using namespace std;
int turnOnBit(int N,int pos)
{
return N=N | (1<<pos);
}
int main()
{
bool ar[] = {0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,1,1};
__int64 x;
for(int i = 0; i < sizeof(ar); i++)
{
if(ar[i])
turnOnBit(x,i);
}
cout<<x<<endl;
return 0;
}
#包括
使用名称空间std;
int转换位(int N,int pos)
{
返回N=N |(1您没有向我们展示足够的相关代码来确定问题是什么。请努力将您的问题代码减少到a,并将其包含在您的帖子中。或者第二行可以是x+=*citer;
。
#include<iostream>
using namespace std;
int turnOnBit(int N,int pos)
{
return N=N | (1<<pos);
}
int main()
{
bool ar[] = {0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,1,1};
__int64 x;
for(int i = 0; i < sizeof(ar); i++)
{
if(ar[i])
turnOnBit(x,i);
}
cout<<x<<endl;
return 0;
}