题目
取整数的第 k 位二进制(0 起)
思路
本题读整数 n 和下标 k,输出 n 的二进制里从低位起第 k 位(从 0 计)是 0 还是 1。
先把 n 右移 k 位,让该位落到最低位,再与 1 按位与:(n >> k) & 1 即为答案。若 k 超出类型位数,按题目约定常视为 0。
解题分析
第 k 位(从 0 起)用 (n>>k)&1。k 超出类型位数时结果未定义,题目一般 k<32。
完整程序
#include <stdio.h>
int main(void)
{
unsigned n;
int k;
if (scanf("%u %d", &n, &k) != 2 || k < 0 || k >= 32) {
return 1;
}
printf("%u\n", (n >> k) & 1u);
return 0;
}
运行示例
输入:
13 3输出:
1