您的位置:首页 > 编程语言 > C语言/C++

《C程序设计语言》练习 2-7

2017-12-28 16:36 141 查看
练习 2-7

编写一个函数 invert(x, p, n),该函数返回对 x 执行下列操作后的结

果值:将 x 中从第 p 位开始的 n 个(二进制)位求反(即,1 变成 0,0 变成 1),x 的其余各

位保持不变。

其实是可以一个表达式搞定的,但感觉太恶心,所以分开了

#include <stdio.h>

invert(x, p, n);

main()
{
int x, y;
x = 123;
printf("%d\n", invert(x, 2, 3));
}

invert(x, p, n)
{
int a, b;
//先搞一个定位器,把那几位定出来
a = ~(~0 << n) << (p - 1);
//然后把x中的这几位取反存进b里
b = ~(x & a);
//最后把x中的那几位替换成b
return x & ~a | b & a;
}


我想了一下,循环好像也可以,但要确定循环次数很麻烦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息