C 当数字的任何一位等于0时,如何打印1?

C 当数字的任何一位等于0时,如何打印1?,c,binary,bitwise-operators,C,Binary,Bitwise Operators,当一个数字的任何一位等于0时,我需要打印出值1,而我目前正为如何进行这项工作而苦苦挣扎。我不应该使用任何等式或不等式测试,基本上只限于位级和逻辑操作。有什么想法吗 int b = 15; printf("prints 1 when any bit of a number equals 0: %d\n", //PRINT GOES HERE); b = 10; printf("prints 1 when any bit of a number equals 0: %

当一个数字的任何一位等于0时,我需要打印出值1,而我目前正为如何进行这项工作而苦苦挣扎。我不应该使用任何等式或不等式测试,基本上只限于位级和逻辑操作。有什么想法吗

int b = 15;
printf("prints 1 when any bit of a number equals 0: %d\n", //PRINT GOES HERE);

b = 10;
printf("prints 1 when any bit of a number equals 0: %d\n", //PRINT GOES HERE);

我不明白你的问题,但对于两个补码有符号整数,所有位都设置为数字
-1

void foo(int a)
{
       printf("prints 1 when any bit of a number equals 0: %d\n", !((unsigned)a ^ (unsigned)-1));
}

int  main(void)
{
    foo(15);
}
所以您需要检查数字是否不相等
-1

void foo(int a)
{
       printf("prints 1 when any bit of a number equals 0: %d\n", !((unsigned)a ^ (unsigned)-1));
}

int  main(void)
{
    foo(15);
}
但在我看来,这太微不足道了。您可能需要从第一个(最高有效)设置位开始检查(因此
15
打印
0
,但
14
打印
1
):

无符号掩码(int a)
{
整数位;
if(!((未签名)a^(未签名)-1))返回-1;
对于(位=sizeof(a)*字符位-1;位;位--)
{

如果((无符号)a&(1U您希望创建一个包含所有1(~0x0)的掩码,然后将其与数字进行异或运算。如果有任何1的后缀,则至少有一个原始位为0,因此,如果至少有一个1,您可以使用&&1返回1,如果没有,则返回0。

@ScottHunter我目前尝试了类似“!b”、“!!(b^0xF)”、“!(!b)”的方法,不幸的是,没有成功地得到我需要的结果。你的任务是否明确告诉你必须输出一个1?或者它必须是非零?你的任务是否明确告诉你输入的类型是
int
,而不是
unsigned int
?@AndreasWenzel输入的类型是int,并且它说s必须输出1注意,
!!
是(在)相等测试中。我怀疑有人要求您通过移位和与按位运算符进行算术合并,并显示结果。