gpt4 book ai didi

c - 按位|在二维数组 C

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:54 24 4
gpt4 key购买 nike

我已经很长时间没有使用 C 了。

我有一个二维数组,其中每个元素是 1 或 0。我想知道每一行是否有 1。我正在这样做:

for (row = xa; row < 50; row++) { 
// need to know first if there is any '1' in the next line
if (|schemaArray[row] == 1) {
printf("1 found in row %d\n",row );
}
}

我是不是用错了?

schemaArray 是我的参数列表中的一个参数:

int findPerimeter(int schemaArray[50][50]) {

最佳答案

您必须遍历该行的所有列以检查是否存在 1

示例代码:

for (int row = xa; row < 50; row++ ) {
int bIsOne = 0;
for (int i = 0;i < col_size && !bIsOne; i++ ) {
bIsOne = bIsOne | schemaArray[row][i];
}
if( bIsOne )
printf("1 found in row %d\n",row );
}

除非您为 schemaArray 构造位图,否则无法使用按位运算符完成此操作。在这种情况下,您可以一次检查整行。

这主要是矫枉过正。仅当您的代码段对性能至关重要时才这样做。

预处理步骤:为schemaArray构造位图数组

long long bitMapSchemaArray[ROW_SIZE];
for (int i = 0; i < row_count; i++) {
long long columnBitMap = 0;
for (int j = 0; j < col_count; j++ ) {
columnBitMap <<= 1; // Multiplies by 2
columnBitMap = columnBitMap | schemaArray[i][j]; // Add a 1 if schemaArray[i][j]=1 else 0
}
bitMapSchemaArray[i] = columnBitMap;
}

在您的函数中,您可以将位图用作:

for (int i = 0; i < row_count; i++) {
if( bitMapSchemaArray[i] )
printf("There is a 1 in %d row\n", i+1);
}

但是,假设我们使用 64 位整数数组,您最多可以在 2-D 数组中包含 64 列。当然,您也可以通过使用 ceil(column_count)/64 64 位整数推断它有超过 64 列。在这种情况下,对每一列按位或以检查累积结果是否仍然非零。

关于c - 按位|在二维数组 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37241154/

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