C 当数字的任何一位等于0时,如何打印1?
当一个数字的任何一位等于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: %
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注意,!
和!!
是(在)相等测试中。我怀疑有人要求您通过移位和与按位运算符进行算术合并,并显示结果。