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;
}
运行截图:
10 1100 10 -> 10 0011 10(178,3,4),输出正确。
小白刚学习C语言,代码质量不高,欢迎评论。