Объяснение того, как интерпретировать шестнадцатеричные значения в функции - PullRequest
0 голосов
/ 19 августа 2010

Моя программа работает отлично, но это было достигнуто методом проб и ошибок;Я пытаюсь понять, как все работает на самом деле из первых принципов.Буду благодарен за любые объяснения.Что эта функция связывает с шестнадцатеричными значениями?

  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;
} 
 } 

1 Ответ

0 голосов
/ 19 августа 2010

Логическая & операция выполняется.

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

Зависит от типа данных, с которыми он работает.Байт состоит из 8 битов, и если все биты установлены, то его шестнадцатеричный эквивалент равен 0xFF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...