c - 当数字的任何位等于0时如何打印1?
问题描述
当数字的任何位等于 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
所以你需要检查数字是否不相等-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);
}
但是IMO太琐碎了。您可能希望从第一个(最重要的)设置位开始检查(所以15
打印0
但14
打印1
):
unsigned mask(int a)
{
int bit;
if(!((unsigned)a ^ (unsigned)-1)) return -1;
for(bit = sizeof(a)*CHAR_BIT - 1; bit; bit--)
{
if(((unsigned)a & (1U << bit))) break;
}
return (1U << (bit + 1)) - 1;
}
void foo(int a)
{
printf("prints 1 when any bit of a number equals 0: %d\n", !!((a & mask(a)) ^ mask(a)));
}
int main(void)
{
foo(15);
}
推荐阅读
- adb - 如何从私钥中获取 adbkey.pub?
- c# - iText7:如何修复:一个带有两个梳子的 PdfTextFormField,SetValue No MaxLen 错误
- python - 使用python根据选择查询列执行更新
- javascript - 向下滚动离子选项列表时出现问题,向上和向下滚动时会选中复选框
- javascript - 将导出函数返回的数据传递给 React 组件
- google-bigquery - 如何更改 BigQuery 重复记录的 col 类型
- c++ - 如何正确设置 MPI_scatterv 中的“发送计数”和“位移”参数?
- python - 为什么 model.predict 与最后一层(keras)的输出不同?
- python - 幂律拟合给出一条直线
- python - 你如何将pygame游戏转换为swf文件?