if条件下的C编程传递函数

if条件下的C编程传递函数,c,function,callback,C,Function,Callback,我正在编写一个简单的函数,它将可屏蔽的0数组和1数组返回给数字数组 若数字是二的幂,可屏蔽索引将是一,若不是,则为零 它在不传递简单函数isPower()的情况下运行良好,但当我传递它时。奇怪的事情发生了 我希望我的代码与 if(isPower(nums[i])) 无条件的 #include<stdio.h> int *isPowerOf2(int num, int*nums,int *result); int isPower(int num); int main(void)

我正在编写一个简单的函数,它将可屏蔽的0数组和1数组返回给数字数组

若数字是二的幂,可屏蔽索引将是一,若不是,则为零

它在不传递简单函数isPower()的情况下运行良好,但当我传递它时。奇怪的事情发生了

我希望我的代码与

if(isPower(nums[i])) 
无条件的

#include<stdio.h>

int *isPowerOf2(int num, int*nums,int *result);
int isPower(int num);
int main(void)
{
int array[]= {1,2,2,4,4,3,4,3,3,4,4,4,4,4};
int size=0;
int *result=NULL;
result=isPowerOf2(14,array,&size);

for(int i=0; i<size; i++)
{
    printf("%i : %i\n",array[i],result[i]);
}
free(result);
printf("%i",size);
return 0 ;
}

int *isPowerOf2(int num, int*nums,int *result_num)
{
int *result=(int *)malloc(num*sizeof(int));

*result_num=num;
for(int i=0; i<num; ++i)
{
    if(isPower(nums[i])||!(nums[i]&nums[i]-1)) //this won't work  but when I use !(nums[i]&nums[i]-1) it works fine
    {
        result[i]=1;
    }
    else
    {
        result[i]=0;
    }

}
return result;
}

 int isPower(int var)
 {
 return ((var)&(var-1)==0)?1:0;
 }
#包括
int*isPowerOf2(int-num,int-nums,int-result);
intispower(intnum);
内部主(空)
{
int数组[]={1,2,2,4,4,3,4,3,4,4,4,4};
int size=0;
int*result=NULL;
结果=isPowerOf2(14,数组和大小);

对于(int i=0;i在这种情况下,检查您实际计算的内容是值得的:

#include<stdio.h>

int main() {
    printf("%d %d\n",!(7&6),((7&6==0) ? 1 : 0)); //Not a power of 2
    printf("%d %d\n",!(8&7),((8&7==0) ? 1 : 0)); //Power of 2
    return 0;
}

如果你想一想,它应该是有意义的。或者它真的在这里杀死了你。为什么右下角是0?

在这种情况下,检查你实际计算的内容是值得的:

#include<stdio.h>

int main() {
    printf("%d %d\n",!(7&6),((7&6==0) ? 1 : 0)); //Not a power of 2
    printf("%d %d\n",!(8&7),((8&7==0) ? 1 : 0)); //Power of 2
    return 0;
}
如果你想一想,这应该是有道理的。或者它真的会杀了你。为什么右下角会是0呢 (1&2)是按位操作数,而 (1&&2)是逻辑操作数

因此,要明确的是: (1和2)==0与!(1和2)完全不同。

是否如此 (1&2)是按位操作数,而 (1&&2)是逻辑操作数

因此,要明确的是:
(1&2)==0与!(1&2)完全不同.

您需要学习
C
语言和
OR
运算符的基础知识。如果OR语句的第一个运算结果为非零值,则不会执行OR语句的第二个操作数。我想您没有理解我的观点。我添加了第二个操作数,因为没有它将无法工作。我添加它是为了澄清我的问题,但我希望代码在没有它的情况下工作。它应该不是be在那里。你是第二个操作数
nums[i]&nums[i]-1
。你知道这里的执行顺序吗?关注
isPower
函数:
返回((var)和(var-1)==0)?1:0;
应该是
返回((var)和(var-1))==0?1:0;
另外,清理它。如果我不能立即用肉眼识别函数的开始/结束,我会关闭voe,以“不清楚”,然后进入下一个问题。你需要学习
C
语言和
运算符的基础知识。如果第一个操作数的计算结果为非零值,则不会执行OR语句的第二个操作数。我想你没有理解我的观点是,我添加了第二个操作数,因为没有它就无法工作。我添加第二个操作数是为了澄清我的问题,但我希望没有它的代码工作。它不应该在那里。您可以使用第二个操作数
nums[I]&nums[I]-1
。您知道这里的执行顺序吗?请关注
isPower
函数:
返回((var)和(var-1)==0)?1:0;
应该是
返回(((var)和(var-1))==0)?1:0;
另外,清理它。如果我不能立即用肉眼识别函数的开始/结束,我会关闭voe,因为“不清楚”,然后继续下一个问题。是的,希望我下次多加注意:)是的,希望我下次多加注意:)