0
假设我们有存储在address
地址中的11101111,我将如何将前4位添加到最后4位?C中的位运算
我的教授向我们展示了我们可以做到这一点(*address)/16 + (*address)%16
但我不明白它为什么起作用。有人可以解释哪些部门与16模来自哪里?
假设我们有存储在address
地址中的11101111,我将如何将前4位添加到最后4位?C中的位运算
我的教授向我们展示了我们可以做到这一点(*address)/16 + (*address)%16
但我不明白它为什么起作用。有人可以解释哪些部门与16模来自哪里?
@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)));
希望它可以帮助你。
2^4 = 16 - 除以16相当于移出最后四位。 – nneonneo
计算* a/16和* a%16的二进制结果。 –
你应该多了解一些二进制和数字库的基本知识 –