gpt4 book ai didi

c - 如何处理 c 中的 196,608 个 if 语句?

转载 作者:行者123 更新时间:2023-11-30 18:21:22 24 4
gpt4 key购买 nike

我正在尝试用 65,536*3 if 实现一个 C 程序诸如下面的陈述。我使用的是 Visual Studio 2013。问题是构建永远不会完成。我知道有很多if那么有什么办法可以解决这种问题呢?

if ((  pre_data[i*rwsize + j]  == 0) && ( bdata[i*rwsize + (j)] == 0))  data[i*rwsize + j] =    2;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 1)) data[i*rwsize + j] = 12;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 2)) data[i*rwsize + j] = 100;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 3)) data[i*rwsize + j] = 20;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 4)) data[i*rwsize + j] = 0;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 5)) data[i*rwsize + j] = 30;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 6)) data[i*rwsize + j] = 0;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 7)) data[i*rwsize + j] = 40;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 8)) data[i*rwsize + j] = 0;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 9)) data[i*rwsize + j] = 120;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 10)) data[i*rwsize + j] = 3;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 11)) data[i*rwsize + j] = 4;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 12)) data[i*rwsize + j] = 7;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 13)) data[i*rwsize + j] = 3;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 14)) data[i*rwsize + j] = 5;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 15)) data[i*rwsize + j] = 30;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 16)) data[i*rwsize + j] = 0;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 17)) data[i*rwsize + j] = 0;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 18)) data[i*rwsize + j] = 1;
if (( pre_data[i*rwsize + j] == 0) && ( bdata[i*rwsize + (j)] == 19)) data[i*rwsize + j] = 0;
...

if (( pre_data[i*rwsize + j] == 255) && ( bdata[i*rwsize + (j)] == 255)) data[i*rwsize + j] = 25;

最佳答案

您根本不需要 if,您正在寻找的是一个普通的旧查找表。

unsigned char table[] = {2, 12, 100, 20, 0, 30, ...};

data[i*rwsize + j] = table[pre_data[i*rwsize + j] * 256 + bdata[i*rwsize + (j)]];

或者使用二维数组

unsigned char table[256][256] = {
{2, 12, 100, 20, 0, 30, ...},
{...},
...
};

data[i*rwsize + j] = table[pre_data[i*rwsize + j]][bdata[i*rwsize + (j)]];

关于c - 如何处理 c 中的 196,608 个 if 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49587993/

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