位运算符实现对数据特定内容的处理

“&”运算符:一个二进制位和0相与能清零;一个二进制位和1相与保持不变。

“|”运算符:一个二进制位和1相或能置1;一个二进制位和0相或保持不变。

“^”运算符:一个二进制位和1异或能取反,一个二进制位和0异或保持不变。

利用这些性质方便实现对数据特定位置值的处理。

源程序

int fun1(unsigned int w);
int fun2(unsigned int w);
void main()
{
    static int x,y;
    int z1, z2, z3, xlB, xnB, xff;
    unsigned int word=0x8795;
    int result1, result2;
    result1=fun1(word);
    result2=fun2(word);
    x=0x8765; 
    xlB=x&0xff;          //x的高字节清零,低字节不变
    xnB=x^(~0xff);    //x的高字节每位取反,低字节不变
    xff=x|0xff;         //x的高字节不变,低字节每位都变为1
    y=0x7895;
    z1=(x&(~y))|((~x)&y);    //z1为x与y的异或
    z2=x^y;        //z1为x与y的异或
    z3=!(x^y);   //x与y相等z3为1,x与y不等z3为0
        
}
int fun1(unsigned int w)     //返回低8位的无符号值
{
    return (int)((w<<8)>>8);
}

int fun2(unsigned int w)     //返回低8位的带符号值
{
    return ((int)w<<8)>>8;
}


程序执行后,z1=z2=0xfff0。  result1=0x0095=95,   result2=0xff95=-107,高字节FFH是符号扩展。
    
    
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值