①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;
windows web Linux的位移操作
左移32位,a為1。左移33位,a為2。int main rack 1,左移32位 編譯時有警告 left shift cout width,但執行結果為1。左移33位,結果為2。結果 和windows保持一致。rack 1,左移32位 編譯時有警告 left shift cout width,執行...
c語言中的位移位操作
參考 先要了解一下c語言裡所有的位運算都是指二進位制數的位運算。即使輸入的是十進位制的數,在記憶體中也是儲存為二進位制形式。用法 格式是 a 0。功能 將整型數a按二進位制位向左移動m位,高位移出後,低位補0。用法 格式是 a m,a和m必須是整型表示式,要求m 0。功能 將整型數a按二進位制位向右...
c語言中的位移位操作
先要了解一下c語言裡所有的位運算都是指二進位制數的位運算。即使輸入的是十進位制的數,在記憶體中也是儲存為二進位制形式。用法 格式是 a 0。功能 將整型數a按二進位制位向左移動m位,高位移出後,低位補0。用法 格式是 a m,a和m必須是整型表示式,要求m 0。功能 將整型數a按二進位制位向右移動m...