我的問題如下,我想正確地創建的setValue的功能(無符號整數&變種,INT K,無符號整型我,詮釋VAL)如何創建蒙
的VAR是路過參考值,int k是分區,i是分區的索引,val是我們傳入參考的值。現在,我的問題是如何創建一個面具。
下面是一個例子,我將使用8位而不是無符號整型的完整32位。
假設變種具有以下值: (1011)(1001),日K = 2 現在,假設我們希望把價值5進入指數1。所以我們需要VAR是: (1011) (0101)。因此,爲了達到那裏,我們需要做出以下邏輯組合。
VAR &面膜,面膜哪裏等於(1111)(0000) VAR =(1011)(0000) 然後我們做的,VAR = VAL | val
(1011)(000) (0000)(0101)|
(1011)(0101)我的問題是如何創建遮罩功能?這裏是哪裏我試圖創建它的代碼片段(順便說一下,我已經把我的VAR在起始位置爲0,我們進入該功能前):
bitSize = sizeof(unsigned int)*8;
partionSize = (bitSize/k);
shiftCount = partionSize*i;
mask = ~((1<< partionSize)-1) << shiftCount;
var = var & mask;
val = val << shiftCount;
var = var | val;
的結果,如果我說我ķ = 2,並且i輸入的5和3以下的2個值是:
5:
shiftc到目前爲止計數爲:0 值掩碼的是:4294901760 在函數內的,VAR到目前爲止是5.
3:
目前爲止的移位次數是:16 mask的值是:0 var的值是196608.現在,二進制中的196608是110000000000000000,所以顯然它只移動了3 16次,並沒有正確地保存那裏5。其他方面應該是110000000000000101.謝謝你的協助。
編輯
我已經編輯面具部分看起來像現在這樣:
if(i == 0)
{
mask = ~((1<< partionSize)-1);
}
else
{
mask = ~(((1<< partionSize)-1) << shiftCount);
}
這似乎現在已經奏效。因爲現在,如果我輸入567,並且輸入346,那麼當我的k = 2時(如果有人想知道爲什麼總是2,我用兩個來讓我的生活更容易進行測試)。
var的最終值是22676023,這在二進制是:01010110100000001000110111 567是:01000110111 和346是:0101011010
這些值中的兩個似乎現今在我們的變量的內部。對更精通C++程序員的問題,這似乎是我的有效邏輯嗎?
什麼是「var函數」? –
var函數是我們的32位表示。實質上,它是我們放置我們的價值觀的變量。 – SomeStudent
你看過'std :: bitset'嗎? –