咨询农夫过河问题的细节,请赐教!

void farmerProblem( ) {
int movers, i, location, newlocation;
int route[16]; /*记录已考虑的状态路径*/
PSeqQueue moveTo;
/*准备初值*/
moveTo = createEmptyQueue_seq( );
enQueue_seq(moveTo, 0x00);
for (i = 0; i < 16; i++) route[i] = -1;
route[0]=0;

/*开始移动*/
while (!isEmptyQueue_seq(moveTo)&&(route[15] == -1)) {
/*得到现在的状态*/
location = frontQueue_seq(moveTo);
deQueue_seq(moveTo);
for (movers = 1; movers <= 8; movers <<= 1) {
/* 农夫总是在移动,随农夫移动的也只能是在农夫同侧的东西 */
if ((0 != (location & 0x08)) == (0 != (location & movers))) {
newlocation = location^(0x08|movers);
if (safe(newlocation) && (route[newlocation] == -1)) {
route[newlocation] = location;
enQueue_seq(moveTo, newlocation);
}
}
}
}
以上是C程序的部分代码,有两个地方看不明
第一
int farmer(int location) {
return 0 != (location & 0x08);
}
这个函数在上面没有写出来~~~~
我知道这个是判断农夫位置的函数,但是location & 0x08是什么意思?
特别是0x08是怎么来的?
第二
farmerProblem( )函数中,for (movers = 1; movers <= 8; movers <<= 1)整个循环条件中的movers = 1; movers <= 8; movers <<= 1是什么意思?特别是<= 8是怎么来?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在学习C语言描述的数据结构,有些东西看不懂,请前辈们不吝赐教!谢谢

第1个回答  2008-04-14
我也想知道那些按位左移(<<)、按位与(&)、按位或(|)、按位异或(^)代表的意义!
能写出这样程序的人真的是牛啊!
我要学到什么时候才这个样子啊!
相似回答
大家正在搜