2010-08-19 68 views
0

我的程序運行良好,但這是通過反覆試驗實現的;我試圖根據第一原則掌握事情的真實情況。我會很感激任何解釋。這個函數與十六進制值進行通信是什麼?說明如何解釋函數中的十六進制值

for (i=0; i<5;i++) 
{ 
    cd=(int)(((numpairs[i])&0xf0)>>4); 

    if((numpairs[i]&0xf)>(0x0)) 
    { 
     if(highest<cd) 
     { 
      //printf("%d\n",cd); 
      highest= cd; 
      cd=-1; 
      winner = i+1; 
     // printf(" highest: %d winner: %d\n", highest,winner); 
     } 
     if(highest==cd) 
     { 
      highest =0; 
      break; 
      //printf(" highest: %d winner: %d", highest,winner); 
     } 
    } 
} 
printf("\n---------------RESULT--------------\n"); 
if(highest>0) 
{ 
    printf("Winner is hand %d with a pair of %s\n", winner, values[highest]); 
} 
else 
    printf("*** DRAW ***\n"); 
    // ========================Function 2======================================= 
pairs findpairs(card *hand) 
{ 
int i; 
card cd1, cd2,cd3, card=0; 
pairs numpairs=0; 
for(i=1; i<4;i=i+2) 
    { 
cd1=hand[i]; 
cd2=hand[i-1]; 
cd3=hand[i+1]; 
cd1= (cd1&0x3c)>>2; 
cd2= (cd2&0x3c)>>2; 
cd3= (cd3&0x3c)>>2; 
if (cd1==cd2 || cd1==cd3) 
{ 
    numpairs++; 
// printf("num pairs: %d\n", numpairs); 
    card=cd1; 
} 
} 
+0

完美工作?!它甚至沒有接近可編譯的程序。 – 2010-08-19 11:02:54

+0

對不起,這只是所有程序中的一個功能。 – 2010-08-19 22:31:48

回答

0

Logical &操作正在執行。

0x3C is equal to 0011 1100 . 
0xf0 is equal to 1111 0000 
0xf is equal to 0000 1111 

取決於正在其上操作的數據類型。一個字節由8位組成,如果所有位都被設置,那麼它的十六進制等效值就是0xFF。

+0

謝謝,開始感覺到一些東西! – 2010-08-19 22:10:41