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