位移操作 高位移向地位、设置或修改任意位数的值。
①buf[nPackLen++] = (BYTE)( m_dwIDCode >> 24);m_dwIDCode 有四个字节,一共32位,移动24位,就是把高字节移向低字节。(BYTE)截取一个字节;
②buf[nPackLen++] = (BYTE)( m_dwIDCode >> 16);
③buf[nPackLen++] = (BYTE)( m_dwIDCode >> 8);
④buf[nPackLen++] = (BYTE)( m_dwIDCode);
m_dwIDCode 有四个字节,如下面;
a b c d
①:移动24位,得到结果 0000000 a,用(BYTE)截取一个字节,以为BYTE占一个自己,如果是unshort 的话,就是2字节;
②移动16位,得到结果 o o a b ,用(BYTE)截取一个字节,得到b.
③ 移动8位 得到结果 0 a b c ,用(BYTE)截取一个字节,得到c
④。直接用(BYTE)截取一个字节,得到低字节。d;
按位与可以有两种作用:
(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
(2)取一个数中指定位
方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。
例:设X=10101110,
取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;
还可用来 取X的2、4、6位。
低字节在前的数据的处理:
BYTE byInfoBuf[2];//获取后的数据时低字节在前的;
int fno = CP5200_ParseOpenFileRet( hObj , byRecvBuf , nReadLen , byInfoBuf , sizeof(byInfoBuf) );
WORD dno = byInfoBuf[0] + (byInfoBuf[1]<<8);//因为byInfoBuf[1] 是高字节,所有向左移动一个字节,也就是8为,加上 byInfoBuf[0],就是原来的值。
比如 byInfoBuf[0] = 00000001;
byInfoBuf[1] = 00000100;
byInfoBuf[1]<<8 = 00000100 00000000;
加上 byInfoBuf[0] 00000001
就得到 00000100 00000001
***********************************************************************************************************************
设置、查询、任意位数的值;
1.如果要查询任意一位的值:
BYTE bydata =0x05;
如果要查询第三位的值;
首先要判断第三位的值是0或者是1;
BYTE temp = bydata&0000100//也就是 bydata&0x04;
if(temp>0)//表明第三位是1;
{
bydata = bydata&11111011//这是第三位的值变为0,其它的值不变;
}
else//表明第三位是1
{
}
2.修改任意位的值
想修改第3位的值为0;
bydata = bydata&11111011//这样不管第三位原来的值是1或者是0,现在第三位的值一定是0;
想修改第3位的值为1;
bydata = bydata|00000100//这样不管第三位原来的值是1或者是0,现在第三位的值一定是1;
如果想把第二位改为1;
过程就是这个样子
bydata = bydata|00000010//这样不管第2位原来的值是1或者是0,现在第三位的值一定是1;