关于c中模线内有界区间的算法

关于c中模线内有界区间的算法,c,math,intervals,C,Math,Intervals,我试图找到算术,因为我没有标识符,在c语言的一行中找到一个集合,尽管语言并不重要。这是: 我将有一组不断增加的行,每行有16个成员。我的目标是在每128行为16名成员中的每一位做点什么。所以,当我到128时,我想找到一个算法,允许这行的16个成员被允许,但一旦它移动到下一行144,就不允许了。它很容易硬编码,但我需要一个通用的解决方案 所以,显然需要mod。我头脑风暴的方式是,我需要引用每128行的第0个成员作为起点。所以我想说,如果你在第128行(143)的第15位,减去15,并确保%128=

我试图找到算术,因为我没有标识符,在c语言的一行中找到一个集合,尽管语言并不重要。这是:

我将有一组不断增加的行,每行有16个成员。我的目标是在每128行为16名成员中的每一位做点什么。所以,当我到128时,我想找到一个算法,允许这行的16个成员被允许,但一旦它移动到下一行144,就不允许了。它很容易硬编码,但我需要一个通用的解决方案

所以,显然需要mod。我头脑风暴的方式是,我需要引用每128行的第0个成员作为起点。所以我想说,如果你在第128行(143)的第15位,减去15,并确保%128==0

Bytesourcepos是数字(即128)

这就是我所拥有的:
((Bytesourcepos-(Bytesourcepos-128))%128==0


这里的问题是,这对于128及以上的任何行都是正确的。不知何故,我需要从一开始就整合16次这样做的界限。任何帮助都将不胜感激。

我将假设所有内容都是0索引的,并且您将第0行计算为所需的行。如果您希望它是1索引的,则此答案将更改这只是一点点

取你的位置,
pos
,它是任何非负整数,
0,1,2,

要获取其在一行上的位置,请执行
linePos=pos%16
。因此,
linePos
将假定值介于
0
15
之间

要获取行上的第一个位置,请执行
firstLinePos=(pos/16)*16
。这里,
/
是整数除法,因此您可以将任何结果向下舍入到下一个最低整数。
firstLinePos
将采用非负整数值,与
pos
相同

请注意,
pos-firstLinePos=linePos
;如果愿意,可以使用此公式计算
linePos
firstLinePos

尝试此遍历:

for( uint idx = 0; idx < 1100; ++idx )
{
    if( 0 == ( 7 & ( idx >> 4 ) ) )
 // if( 0 == ( idx / 16 ) % ( 128 / 16 ) )
    {
        printf( "%d\n", idx );
    }
}
for(uint idx=0;idx<1100;++idx)
{
如果(0==(7&(idx>>4)))
//如果(0==(idx/16)%(128/16))
{
printf(“%d\n”,idx);
}
}
(Bytesourcepos-(Bytesourcepos-128)
-->
+128
.So
((Bytesourcepos-(Bytesourcepos-128))%128==0
128%128==0
1