-4

这个函数的代码是什么样的?对不起,我是自学和编程新手

创建一个名为 reset_bits(int value, int pos, int n) 的函数,它将位位置 pos、pos + 1、...、pos + n - 1 的 n 个连续位 value 中的每一个设置为位值 0,并且以十六进制打印结果。例如,reset_bits(0x8C3E, 2, 3) 会打印出 0x8C22,这是将 0x8C3E 的第 2、3、4 位位置设置为 0 的结果。可以假设 pos 和 n 指定的所有位位置都有效位位置。您可以使用的唯一 C 库函数是 printf()。

这是我一本关于 C 编程的书中的练习题,但我没有解决方案手册。

模板:

    #include <stdio.h>
    #include <limits.h>

 int reset_bits(int value, int position, int n) {
     int r = pos + 1;
     int l = pos + n;
     int range = (((0xFF << (r - 1)) - 1) ^ ((0xFF << (l) - 1));
     int answer = value | range;

  printf("%x", answer);
  printf("\n");
    }

    int main() {
        reset_bits(0x8C3E, 2, 3); 
    }
4

1 回答 1

-1

该功能可以通过以下方式查看

#include <stdio.h>
#include <limits.h>

int reset_bits( int value, size_t position, size_t n ) 
{
    const size_t Width = CHAR_BIT * sizeof( int );

    if ( position < Width )
    {
        if ( Width - position < n ) n = Width - position;

        value &= ~( ~( ~0u << n )  << position );
    }

    return value;
}

int main(void) 
{
    int x = 0x8C3E;

    printf( "%#X -> %#X\n", ( unsigned int )x, ( unsigned int )reset_bits( x, 2, 3) );

    return 0;
}

程序输出为

0X8C3E -> 0X8C22
于 2020-04-15T22:49:56.147 回答