题目

取整数的第 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