位运算符实现对数据特定内容的处理
“&”运算符:一个二进制位和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是符号扩展。