C中的位算术

时间:2016-11-24 21:02:10

标签: c binary

假设我们在address地址中存储了11101111,如何将前4位添加到最后4位?

我的教授向我们展示了我们可以做到这一点(*address)/16 + (*address)%16但我不明白为什么会这样做。有人可以解释16的除法和模数来自何处?

1 个答案:

答案 0 :(得分:1)

@VanGo,看看要对位执行操作,你必须首先学习按位运算符。

我在这里解释你的问题。

11101111(采用二进制形式),相当于239(十进制)。 现在你必须在1111中添加1110.为了从11101111获得这两对4位,你必须在11101111上执行按位操作。

要获得更高的4位,请从左向右移动11101111四次。

*地址>> 4: - 等于* address / 16

内部编译器将*地址>> 4转换为(*地址)/(2 pow 4)。

要获得较低的4位,请执行(*地址)& 0x0f或(*地址)%16。两个操作都将清除除低4位以外的所有位。

    printf(".....%d\n",(((*address)>>4) + ((*address)&0x0f)));
希望它对你有所帮助。