按位 |在二维数组 C
bitwise | in a 2d-array C
好久没用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 列。在这种情况下,按位或每一列来检查累积结果是否仍然非零。
很简单,只需遍历整行并找出
for (row = 0; row < 50; row++) {
for (col= 0; row < 50; col++) {
if (schemaArray[row][col] == 1){
printf("1 found in row %d\n",row );
break;
}
}
}
好久没用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 列。在这种情况下,按位或每一列来检查累积结果是否仍然非零。
很简单,只需遍历整行并找出
for (row = 0; row < 50; row++) {
for (col= 0; row < 50; col++) {
if (schemaArray[row][col] == 1){
printf("1 found in row %d\n",row );
break;
}
}
}