2013-01-23 41 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