2014-07-25 26 views
1
unsigned int x = 0xdeadbeef; 
unsigned int y = 0x00000006; 
unsigned int z = 0xdeadbee7; 

如何計算從值xyz值給出僅位的int 1-3組?組比特1-3中一個整數如期望

位的y 1-3是011,我想位x的值的1-3與比特y 1-3留下的其它位,因爲它們是被替換。

回答

6

這聽起來像你應該:

  • 屏蔽掉位1-3讓他們不能設置
  • 或與Y的位1-3的結果

所以:

// 0xe == 8 + 4 + 2 (i.e. bits 1-3) 
z = (x & ~0xe) | (y & 0xe); 

注意~是按位inverse運算符,因此爲了清除3位,您需要對這些位進行反轉,並使用該反轉與當前值的按位與。

如果您知道只有位1-3將在y中設置,您可以使用| y而不是| (y & 0xe)。 (注意,我已經假定「位1-3」是指使用從0開始的正常位計數機制的值爲8,4和2的位。如果你的意思是「最低三位位「,這通常是位0-2,並且你會在代碼中使用7而不是0xe。)

+1

@necromancer:Goodo - 我將留給那些想要的未來讀者澄清一下。 –

+0

實際上,另一個有用的方法是如何最好地更新'x'的值,而不是分配給一個新的變量'z' – necromancer

+2

@necromancer:只需分配給'x'而已... –

相關問題