2-7 编写一个函数 invert(x, p, n),该函数返回对 x 执行下列操作后的结 果值:将 x 中从第 p 位开始的 n 个(二进制)位求反(即,1 变成 0,0 变成 1),x 的其余各 位保持不变

发布时间 2023-07-23 19:15:40作者: 语巫

Archlinux

GCC 13.1.1  20230429

2023-07-23 19:03:37 星期日

 


点击查看代码
#include<stdio.h>
#include<stdint.h>

void invert( unsigned int x, int p, int n )
{
    uint8_t mask = 255 >> (p-1);   printf("mask\t%b\n", mask);
    uint8_t tmp = ~(mask >> n);    printf("tmp\t%b\n", tmp);

    mask = mask & tmp;             printf("mask\t%b\n", mask);
    tmp = ~(x & mask);             printf("tmp\t%b\n", tmp);
    x = x & (~mask);               printf("x\t%b\n", x);
    mask = x | mask;               printf("mask\t%b\n", mask);
    x = tmp & mask;                printf("x\t%b\n", x);  
}


int main()
{
    int x = 178;    // 10110010, 2+16+32+128
    int p = 3;
    int n = 4;
    
    invert( x, p, n );

    //printf("%d\n", x);


    return 0;
}


 


运行截图:

image

10 1100 10 -> 10 0011 10(178,3,4),输出正确。

 


小白刚学习C语言,代码质量不高,欢迎评论。