如何使用 bitset < 计算位转换>
我是 C++ 新手。我想计算 9 位序列中从 0 到 0、0 到 1、1 到 0 和 1 到 1 的转换次数。我写了以下代码;
int main {
srand((unsigned)time(0));
unsigned int x;
for (int i=0:i<=512;i++) // loop-1
{
x=rand()%512;
bitset<9>bitseq(x);
for(int j=0;j<=bitseq.size();j++) // loop-2
{
bool a= bitseq.test(j);
bool b= bitseq.test(j+1)
if ((a==0)&(b==0)==0)
{
transition0_0 = transition0_0 + 1; // transition from 0 to 0
}
else if ((a==0)&(b==1)==0)
{
transition0_1 = transition0_1 + 1;
else if ((a==1)&(b==0)==0)
{
transition1_0 = transition1_0 + 1;
else
{
transition1_1 = transition1_1 + 1;
cout<<transition0_0<<" "<<transition0_1<<endl;
cout<<transition1_0<<" "<<transition1_1<<endl;
}
}
有人请指导我以下
- 如何保存循环2中的最后一位值以检查从最后一个位集输出的最后一位到下一个位集输出的第一个位的转换?
- 如果这不起作用,我如何将其保存在向量中并使用迭代器来检查转换?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先,循环索引 j 运行到
bitset
的末尾。索引从 0 到bitseq.size()-1
(含)。如果您要测试j
和j+1
,则j
可以采用的最大值是bitseq.size()-2
。其次,出现在
if
中的==0
部分很奇怪,您应该只使用注意使用两个
&&
。虽然单个&
适用于此代码,但我认为最好使用正确传达您意图的运算符。然后为了回答你的问题,你可以保留一个最初设置为哨兵值的“最后一位”变量(表明你现在看到的是第一个bitseq),并在循环2开始之前将其与bitseq[0]进行比较这是您的代码的修改版本,应该可以满足您的要求。
First of all, the loop index j is running past the end of the
bitset
. Indices go from 0 tobitseq.size()-1
(inclusive). If you're going to testj
andj+1
the largest valuej
can take isbitseq.size()-2
.Second, the
==0
part that appears in yourif
s is strange, you should just useNotice the use of two
&&
. While a single&
works for this code, I think it's better to use the operator that correctly conveys your intentions.And then to answer your question, you can keep a "last bit" variable that is initially set to a sentinel value (indicating you're seeing the first bitseq just now) and compare it to bitseq[0] before the start of loop 2. Here's a modified version of your code that should do what you ask.
这样的事情对你来说会更好吗?使用 4 个整数的数组,其中 [0] = 0->0、[1] = 0->1、[2] = 1->0、[3] = 1->1。
Would something like this be better for you? Use an array of 4 ints where [0] = 0->0, [1] = 0->1, [2] = 1->0, [3] = 1->1.