2015-06-10 49 views
1

我想通過僅使用移位操作來嘗試從一個字節中僅獲取右邊的四個位,但它有時有效,有時不會,但我不會不明白爲什麼。只使用移位操作從一個字節中獲取右邊的四位

下面是一個例子:

unsigned char b = foo; //say foo is 1000 1010 
unsigned char temp=0u; 

temp |= ((b << 4) >> 4);//I want this to be 00001010 

PS:我知道我可以使用一個mask=Ftemp =(mask&=b)

+0

它是如何不工作?你能給個例子嗎? –

+0

@EugeneSh。現在我看到了我在代碼中所做的事情,所以這不是爲什麼它不起作用。 – shinzou

+0

我認爲'temp = foo & 0xf;'會是更好的方法...... – twalberg

回答

2

移位運算符僅適用於整數類型。使用<<會導致隱式積分促銷,請將b轉換爲int,並「保護」較高位。

要解決,使用temp = ((unsigned char)(b << 4)) >> 4;

+0

我的臨時代碼在我自己的代碼中是無符號的字符,這是行不通的。例如,字節'01000001'被分配給temp。 – shinzou

+0

@kuhaku - 你改變了問題,我改變了答案:-) – Amit

+0

是的,就是這樣。即使我在所有類型中都使用'unsigned char',爲什麼它會盡力保護符號位? – shinzou