【发布时间】:2012-10-06 00:37:46
【问题描述】:
unsigned char xor4(unsigned char c1, unsigned char c2){
int i = 0;
while(i < 8){
if((getBit(c1, i) ^ getBit(c2, i)))
setBit(c1,i);
else clearBit(c1, i);
i+=2;
}
return c1;
}
上面的代码应该是一个非常简单的函数,它根据与第二个字符中的每隔一个位进行异或的结果来设置一个字符中的每隔一个位。出于某种原因,这根本行不通。该程序似乎只是忽略了我的 while 循环并返回原始函数。
哦,这是我的 getBit、setBit 和 clearBit 函数。
unsigned char getBit(unsigned char c, int n){
return (c & 1<<n) >> n;
}
unsigned char clearBit(unsigned char c, int n){
c = c & (~(1<<n));
}
unsigned char setBit(unsigned char c, int n){
`c = c | (1<<n);
}
【问题讨论】:
-
return c1 ^ c2;将是一种更有效的方法。 -
一个重要的问题:究竟是什么让您认为 while 循环 不起作用?您如何验证这些循环是否确实有效?
-
@KarolyHorvath 的观点可能有点过于微妙。 OP 错误地认为 while 循环没有执行。一些明智的 printfs 会验证它正在执行,但 setbit 和 clearbit 调用没有改变 c1。
标签: c loops while-loop