gpt4 book ai didi

c - 从 c 中的算法实现 for 循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:16:00 25 4
gpt4 key购买 nike

我只是在学习 c,我正在尝试从一个算法中实现一个 for 循环。我对如何实现它感到非常困惑,请在下面查看我的尝试。任何帮助或想法将不胜感激,因为我不确定,这是否意味着循环中的循环。或者我是否正确地实现了 for 循环,

算法状态 For all possible a = (0,z0,z1,0)

从算法循环

   for (z0, z1) = (0x00, 0x00) to (0xff,0xff)
h0 = somemethod( 0x02000000L ⊕ (0x00, z0,z1,0x00)) )

我的尝试

  #define WORD32 unsigned int 

for (BYTE z = 0x00; z < 0xff; z++)
{
for (BYTE z1 = 0x00; z1 < 0xff; z1++)
{
WORD32 a = (0 << 24 | a1 << 16 | z << 8 | 0);
WORD32 h0 = f(0x02000000L^a);
}
}

所以我不确定循环,下面是正确的

        h0 = somemethod( 0x02000000L ⊕ (0x00, z0,z1,0x00)) )

WORD32 a = (0 << 24 | a1 << 16 | z << 8 | 0);
WORD32 h0 = f(0x02000000L^a);

IE 我是怎么得到的

 (0x00, z0,z1,0x00)

更新

是后序:(0, 0), (0, 1), (1, 2), ..., (0, 255), (1, 0), ...

这意味着所有可能的组合 - 一旦您完成所有组合,顺序就无关紧要了。

最佳答案

您的方法应该几乎可行,只有变量名称、边界 ( 0 <= a <= 0xff) 和循环变量的大小需要更正。

for (int z = 0; z <= 0xff; z++)
{ // inner loop same general approach...
}

如果您遇到过迭代整个数字范围并且无法切换到更大的数据类型的情况,则可以在循环结束时使用手动中断条件。对于 BYTE 的循环它可能看起来像这样

for (BYTE z = 0; z <= 0xff; z++)
{ // inner loop same general approach, followed by break condition...
if (z == 0xff) break; // next increment would overflow to 0
}

关于内循环的内容,可以缩短很多,因为0x02000000并且其他值没有任何重叠字节。 (注意我写 a1 是因为你这样做,而不是因为它有任何意义)

WORD32 a = (0 << 24 | a1 << 16 | z << 8 | 0);
WORD32 h0 = f(0x02000000L^a);
// vs same result
unsigned long h1 = f(0x02000000L | a1 << 16 | z << 8);

即使你需要存储a作为中间结果,0 << X没什么用,就写a = a1 << 16 | z << 8 .

所以具有正确变量名的整个代码看起来像

for (int z0 = 0; z0 <= 0xff; z0++)
{
for (int z1 = 0; z1 <= 0xff; z1++)
{
unsigned long a = z0 << 16 | z1 << 8;
unsigned long h = f(0x02000000 | a); // using | or ^ doesn't matter
}
}

关于c - 从 c 中的算法实现 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41014150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com