C++位运算

位运算学习总结

位运算作用

1. 掩码
掩码是某些位设为开(1),而某些位设置为关(0)的位组合

ch &= 0xff; //留下ch的最后8位

2. 打开位
有时需要打开一个值的特定位,同时其他位不变,使用“位或”来实现

ch = ch | 0x01; //打开第一位

3. 关闭位
不影响其它位,关闭特定位,使用“与”

ch = ch & 0xFE; //关闭第一位


4. 转置位把1的变为0,0变为1;使用“异或”
ch ^= 0xff; //转置所有位

5.查看一位的值
if( (flag & MASK) == MASK )
{
   ... ...
}


移位运算
<< 左移;>> 右移
提供高效的对2的幂的乘法和除法

例,使用位运算显示二进制数:


char* itobs( int nNumber, char* pReturn )
{
    static int size = 8 * sizeof(int);
    for( int i = size - 1 ; i >= 0; i--, nNumber >>= 1)
    {
        pReturn[i] = ( 1 & nNumber ) + '0';
    }
    pReturn[size] = '\0';
    return pReturn;
}

反转最后几位
int invert_end( int nNumber, int nCount)
{
    int mask = 0;
    int bitmaks = 1;
    while( nCount-- > 0 )
    {
        mask |= bitmaks;
        bitmaks <<= 1;
    }
    return nNumber^mask;
}

位字段
struct segment
{
    unsigned int seg1:1;
    unsigned int seg2:1;
};

指定两个1位字段, seg1和seg2各占1位,整个struct 占4个字节(unsigned int),只用了其中2位(共4*8=32位)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值