1
unsigned int x = 0xdeadbeef;
unsigned int y = 0x00000006;
unsigned int z = 0xdeadbee7;
如何計算從值x
和y
在z
值給出僅位的int 1-3組?組比特1-3中一個整數如期望
位的y
1-3是011
,我想位x
的值的1-3與比特y
1-3留下的其它位,因爲它們是被替換。
unsigned int x = 0xdeadbeef;
unsigned int y = 0x00000006;
unsigned int z = 0xdeadbee7;
如何計算從值x
和y
在z
值給出僅位的int 1-3組?組比特1-3中一個整數如期望
位的y
1-3是011
,我想位x
的值的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。)
@necromancer:Goodo - 我將留給那些想要的未來讀者澄清一下。 –
實際上,另一個有用的方法是如何最好地更新'x'的值,而不是分配給一個新的變量'z' – necromancer
@necromancer:只需分配給'x'而已... –