2016-11-24 61 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))); 

希望它可以帮助你。