激活C中数字的某些位

问题描述 投票:1回答:1

我需要实现应激活的功能int activate_bits(int a,int left,int right)数字a上左侧和右侧的所有位(不包括左侧和右侧的位)右)。

到目前为止,我已经提出了这个:

int activate_bits(int a, int left, int right)
{
    int n, j, mask, masked_a;

    for (n = 1; n < left; n++) {
        mask = 1 << n;
        masked_a = a | mask;
    }

    for (j = 31; j > right; j--) {
        mask = 1 >> j;
        masked_a = a | mask;
    }

    return masked_a;
}

有人可以帮我为什么masked_a不正确或修复我的错误代码吗?

c bit
1个回答
1
投票

我怀疑您需要在循环之前将masked_a设置为a

int activate_bits(int a, int left, int right)
{
    int n, j, mask, masked_a;

    masked_a = a;

    for (n = 1; n < left; n++) {
        mask = 1 << n;
        masked_a = masked_a | mask;
    }

    for (j = 31; j > right; j--) {
        mask = 1 >> j;
        masked_a = masked_a | mask;
    }

    return masked_a;
}
© www.soinside.com 2019 - 2024. All rights reserved.