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

练习 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;
}

我想了一下,循环好像也可以,但要确定循环次数很麻烦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值