gpt4 book ai didi

c - 4 变量映射到数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:40 25 4
gpt4 key购买 nike

我需要根据 4 个变量的值选择一个数组项,如下所示,在 C 中。

  0  | 1  | 0  | -1 | array[1][0]
-1 | 0 | 1 | 0 | array[1][1]
0 | -1 | 0 | 1 | array[1][2]
1 | 0 | -1 | 0 | array[1][3]

1 | 0 | 0 | -1 | array[2][0]
1 | 0 | 0 | 1 | array[2][1]
-1 | 0 | 0 | 1 | array[2][2]
-1 | 0 | 0 | -1 | array[2][3]

0 | 1 | -1 | 0 | array[3][0]
0 | 1 | 1 | 0 | array[3][1]
0 | -1 | 1 | 0 | array[3][2]
0 | -1 | -1 | 0 | array[3][3]

(数组中第二列的顺序并不重要,如果需要可以重新排序。)

虽然将所有可能性都放在 12 个链式 if 中是可能的(并且完全可以接受),但我想看看是否有人能想出一个“更干净”的解决方案。

编辑: 澄清一下:我想要一个函数 f(a,b,c,d) 其中(例如)f(0, 1, 0, -1) 返回保存在 array[1][0] 中的值。

最佳答案

为了更容易解释,我以一种效率稍低的方式描述了这个解决方案;更简洁的版本很容易从我在这里展示的内容中推导出来。

将值 -1、0 和 1 映射到 0x00、0x01 和 0x02,并将它们存储在一个 8 位值中,每个值使用 2 位,例如您的数组值对应于以下数字:

array[1][0]: binary value 01100100 = 0x64
array[1][1]: binary value 00011001 = 0x19
array[1][2]: binary value 01000110 = 0x46
array[1][3]: binary value 10010001 = 0x91

为所有 255 个可能的值创建一个数组,这些值可以保存在一个 8 位值中(请注意,不会使用某些条目,即任何两个位都设置为 1 - 这是我提到的低效率)。

例如

array[0] points to the appropriate array for -1, -1, -1, -1
array[1] points to the appropriate array for -1, -1, -1, 0
array[2] points to the appropriate array for -1, -1, -1, 1
array[3] points nowhere

array[4] points to the appropriate array for -1, -1, 0, -1
array[5] points to the appropriate array for -1, -1, 0, 0
array[6] points to the appropriate array for -1, -1, 0, 1
array[7] points nowhere

(etc, obviously)

然后您只需进行一次查找,无需循环,即可获得正确的数组(或您要输入的任何内容)。

在更简洁的解决方案中,该表没有指向任何地方的条目。

编辑:

在这种情况下,使用上面的数组,所需的功能是:

f(a,b,c,d) {
return array[(a+1) << 6 + (b+1) << 4 + (c+1) << 2 + (d+1)];
}

关于c - 4 变量映射到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3866486/

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