2013-01-23 91 views
0

我必須編寫一個方法,它接受一個整數作爲參數(0,1,2或3)。我必須使用它來創建一個0的位掩碼。因此,如果參數爲0,則位掩碼將爲FFF0,對於1:FF0F,2:F0FF,3:0FFF。我試圖不去硬編碼它。使用單個數字移位4位

我都試過了,但它僅適用部分:

int bob = 0xFFFF; 
int multi = 2; 

multi = multi << param; 

這個作品用1和2,對於即使是那些,它使0xFF000xF000

我試圖不使用乘法(這會使它更容易,所以我不想使用它)。

+0

刪除所有提及的「java」可能實際上並不是一個好主意......讓我不確定它是如何處理負數的(例如,如果'int'意味着一個16,manu-fatto的回答將不起作用(0xFFFF)等於-1) – Jeff

回答

2

事情是這樣的:

bitmask = 0xFFFF; 
bitmaskmask = 0xF; 
bitmaskmask = bitmaskmask << parameter * 4; 
bitmask = bitmask^bitmaskmask; 
+0

謝謝。我使用了類似的技術來避免乘法,使用2個if子句。 我使用了一個int 2作爲基礎,並且根據他的參數I移動它,b/c 2是0b10,並且2 << 1是0b100,它是4,而2 << 2是0b1000,它是8並且等等。謝謝。 – iamseiko

2

我會說:

0xFFFF - (0xF << (param * 4)) 
+2

或者'0xFFFF - (0xF <<(param << 2))',如果你真的想避免乘法... – Jeff

+1

0xFFFF - (0xF <<( param <<(1 << 1))):) – Patashu

0

鑑於你的投入,就可以實現你在找什麼使用按位異或操作如下:

xorMask = 0x000F << (4*multi) ; 
result = bob^xorMask ; 

這會在16位值的適當部分創建一個1位XOR掩碼,然後將它與inp異或ut輸出到0位。

+0

除了......如果'multi == 2 && bob == 1'你用'0x0F01'代替'0x0001'。 – Jeff