2016-11-24 63 views
0

假設我們有存儲在address地址中的11101111,我將如何將前4位添加到最後4位?C中的位運算

我的教授向我們展示了我們可以做到這一點(*address)/16 + (*address)%16但我不明白它爲什麼起作用。有人可以解釋哪些部門與16模來自哪裏?

+0

2^4 = 16 - 除以16相當於移出最後四位。 – nneonneo

+0

計算* a/16和* a%16的二進制結果。 –

+0

你應該多瞭解一些二進制和數字庫的基本知識 –

回答

1

@VanGo,請參閱對位執行操作,您必須先學習按位運算符。

我在這裏解釋你的問題。

11101111(以二進制形式),相當於239(十進制)。 現在您必須在1111中添加1110.爲了從11101111中獲得這兩對4位,您必須在11101111上執行按位操作。

要獲得更高的4位,請從左向右移動11101111四次。

*地址>> 4: - 等於*地址/ 16

內部編譯器轉換*地址>> 4成(*地址)/(2 POW 4)。 (*地址)& 0x0f或(*地址)%16。兩個操作都將清除除低4位以外的所有位。

printf(".....%d\n",(((*address)>>4) + ((*address)&0x0f))); 

希望它可以幫助你。