DWORD按位寫 取出特定位

2021-09-26 04:24:28 字數 1086 閱讀 5128

開發乙個大型工程很多時候不想去更改標頭檔案,但是又需要在開發後期增加

引數,除了利用原先預留的標誌位dwreserv[20],比如這裡就預留了20位;還可以將原來的引數拆分成幾個。 比如乙個dword一共有4個位元組,可以開闢每8位來儲存乙個引數,之後收到的時候再取出來就行了。

例子:乙個dword型別的引數,現在想要bit0-bit7 填寫colorprimaries引數,bit8-bit15填寫transfercharacteristic引數,bit16-bit23填寫matrixcoefficients引數。 

這些引數都是int型別。那麼該怎麼填充呢?

int ecolourprimaries = 9;

int etransfercharacteristic = 18;

int ematrixcoefficients = 9;

dword nresult = ecolourprimaries;

dword ntemp = etransfercharacteristic;

ntemp = ntemp<<8;

nresult |= ntemp;

ntemp = ematrixcoefficients;

ntemp = ntemp << 16;

nresult |= ntemp;

簡單來說就是

nresult = ecolourprimaries |  (etransfercharacteristic << 8 ) | (ematrixcoefficients << 16 );
那麼怎麼取對應位的資料呢?

對方收到nresult,按照約定的方式去取對應位的引數,2進製 8位全部為1的值是255.

dword filter = 255;

int color1 = nresult & filter;

nresult = nresult>>8;

int trans1 = nresult&filter;

nresult = nresult>>8;

int matrix1 = nresult&filter;

按位AND和按位OR

description 已知長度為n的兩個位串a和b,求它們的按位and和按位or。input 多組測試資料,每組測試資料第1行輸入位串長度n 0 n 64 第2行輸入n個以空格隔開的取值為0或1的整數表示位串a,第3行輸入n個以空格隔開的取值為0或1的整數表示位串b。output 每組測試資料佔兩...

按位與 按位異或 按位取反

按位與 按位或 按位異或 1.按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例如 9 5可寫算式如下 00001001 9的二進位制補碼 00000101 5的二進位制補碼 0000...

1 3按位AND和按位OR

time limit 1000 ms memory limit 65536 kib problem description 已知長度為n的兩個位串a和b,求它們的按位and和按位or。input 多組測試資料,每組測試資料第1行輸入位串長度n 0 n 64 第2行輸入n個以空格隔開的取值為0或1的整...