首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环和数组

循环和数组
EN

Stack Overflow用户
提问于 2012-12-08 00:57:02
回答 5查看 122关注 0票数 1

您好,我正在尝试构造一个循环来执行(C++)中的8421代码的16个状态。

代码语言:javascript
复制
   while( condition)
   {
   double Bubble[16], Bubble1[16];
        Bubble[0] = ( a-2 - (b-2) ) + ( c-2 - (d-2)); // represents 0000
        Bubble[1] = ( a-2 - (b-2) ) + ( c-2 - (d+2)); // represents 0001
        Bubble[2] = ( a-2 - (b-2) ) + ( c+2 - (d-2)); // represents 0010
        Bubble[3] = ( a-2 - (b-2) ) + ( c+2 - (d+2)); //represents 0011
    .......
        Bubble[15] =(a+2 - (b+2) ) + ( c+2 - (d+2)); //represents 1111
  }

有没有一种使用for循环进行编码的简单方法?而不是每次都编写bubble[]?

0代表-2,1代表+2。所以我有4个变量,每个变量都需要递增和/或递减。使用for循环可以做到这一点吗?

感谢您的帮助

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-08 01:02:13

我不完全确定你的代码在做什么,但你可以按如下方式重写它:

代码语言:javascript
复制
for (int i = 0; i < 16; i++) {
  double a_value = (i & 0x8) ? a+2 : a-2;
  double b_value = (i & 0x4) ? b+2 : b-2;
  double c_value = (i & 0x2) ? c+2 : c-2;
  double d_value = (i & 0x1) ? d+2 : d-2;
  Bubble[i] = (a_value - b_value) + (c_value - d_value);
}
票数 5
EN

Stack Overflow用户

发布于 2012-12-08 01:11:16

下面是一个避免分支的版本:

代码语言:javascript
复制
double Bubble[16];
for(int i = 0 ; i < 16 ; i ++)
{
    int da,db,dc,dd;
    da = ((i&8) - 4) >> 1;
    db = ((i&4) - 2);
    dc = ((i&2) - 1) << 1;
    dd = ((i&1) << 2) - 2;

    Bubble[i] = 
        ((a + da) - (b + db)) + ((c + dc) - (d + dd));
}
票数 2
EN

Stack Overflow用户

发布于 2012-12-08 01:46:36

这里也有一种方法,如果必须为更多的状态(位)执行此操作,则会更通用一些:

代码语言:javascript
复制
var varList = [a, b, c, d];  //these would be the values of a, b, c, d up to the number of states desired
for (var i=0; i<Bubble.length; i++) {
     var numBits = varList.length;
     //If the var list is not large enough, this will be an error (I will just handle it by returning)
     if (Math.pow(2, numBits) < Bubble.length) return;
     for (var j=1; j<=numBits; j++) {
         //first bit corresponds to last state
         var stateVal = varList[numBits - j];
         //if 2^bit is set, add 2, else subtract 2
         stateVal += (i % pow(2, j) === 0) ? 2 : -2;
         //add if even state, subtract if odd state
         Bubble[i] += ((numBits - j) % 2 === 0) ? stateVal : -stateVal;
     }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13767530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档