我正在编写简单的函数,它将可屏蔽的零和1数组返回到数字数组。
如果number是两个可屏蔽索引的幂,那么如果不是则为零。
没有通过我的简单函数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;
}
答案 0 :(得分:3)
在这种情况下,检查你实际计算的内容是值得的:
#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 0
1 0
如果你仔细想想,应该有意义。或者是吗? Operator precedence在这里杀了你。为什么右下角为0?
答案 1 :(得分:1)
祝福 (1&amp; 2)是按位操作数 (1&amp;&amp; 2)是逻辑操作数。
所以要明确: (1&amp; 2)== 0与!(1&amp; 2)完全不同。