假设我们在address
地址中存储了11101111,如何将前4位添加到最后4位?
我的教授向我们展示了我们可以做到这一点(*address)/16 + (*address)%16
但我不明白为什么会这样做。有人可以解释16的除法和模数来自何处?
答案 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)));
希望它对你有所帮助。