【发布时间】:2019-03-31 07:12:26
【问题描述】:
我正在尝试制作一个程序,它打印出 C 中最左边 1 位的位置,但没有循环。
这是我目前收集到的:
#include<stdio.h>
int main() {
unsigned int x, y;
printf("Enter an integer: ");
scanf("%d", &x);
// Bit
x |= x >> 4;
x |= x >> 2;
x |= x >> 1;
x ^= x >> 1;
printf("\n%d", x);
return 0;
}
这会将最左边的位打印为整数,但我无法将其转换为其最高设置位的位置。
128 应该是 8 (1000 0000) 64 应该是 7 (0100 0000)
【问题讨论】:
-
把班次加起来就行了。
-
为什么不
__builtin_clz(在 GCC 上)或BitScanReverse(在 MSVS 上)? -
128 编号为 7,而不是 8。
-
"128 应该是 8,64 应该是 7"
(int)log2(x)+1 -
您确定这些限制吗?如果可以用条件句,就写
if (x & (1 << 7)) printf("7\n"); else if ...,好像太简单了。
标签: c binary bit-manipulation