如何通过位移来置位

本文介绍了一种使用位操作来设置变量特定位的方法。该方法通过一个简单的函数实现,能够将指定位置的位设置为1或0,同时保持其他位不变。通过示例代码展示了如何在C++中实现这一功能。

通过位移来设置一个变量的某一位为0或者为1,并且保持其他位不改变,这里置位函数为:
void bit_set(unsigned char *p_data, unsigned char position, bool flag);
p_data 是一个指向要置位的数的指针,position是要具体置位数的哪一位,从0下表开始,flag为bool类型,为真则置位1,为假置位0,下面我们来看看代码实现过程:

#include<iostream>
using namespace std;

void bit_set(unsigned char *p_data, unsigned char position, bool flag)
{
/*  int sum = 1;
    int sum1 = 1;
    int sum2 = 0;
    if(p_data != NULL && (position >=1 && position <= 8))
    {
    for(int i =0; i<position; ++i)
        {
        if(i == 0)
            sum = 1;
        else
            sum *= 2;
        }
        for(int j=0; j<8; ++j)
        {
            if(i == 0)
                sum1 = 1;
            else
                sum1 *= 2;
        }
        sum2 = sum1 - sum;
        if(flag)
            *p_data |= sum;
        else
            *p_data *= sum2;*/

//简单的四行代码就可以解决问题
        if(flag)
            *p_data |= (1<<position-1);
        else
            *p_data &= ~(1<<position-1);
    }
}
int main()
{
    unsigned char p_data = 'A';
    unsigned char position = 2; 
    bool flag = 1;
    bit_set(&p_data, position,flag);
    cout<<p_data<<endl;
    return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值