2015-12-06 3 views
-2

Я пытаюсь написать простую программу, используя C, чтобы вычислить пересечение между двумя строками с помощью Bitwise AND оператора как:C: Почему побитовое И работает специальный символ

 char x[]="abcdefghijklmnopqrstuvwxyz"; 
     char y[]="abcdefghijklmnopqrstuvwxyz"; 

     int i,sum=0; 
     const int size = 26; 

     for(i=0;i<size;i++) 
     { 
      if(x[i]&y[i]==y[i]){ 
       printf("%c",y[i]); 
       sum++; 
      } 
     } 

     printf("\n%d\n",sum); 

После выполнения кода я нашел результат:

acegikmoqsuw 
13 

В чем проблема с моим кодом или в чем причина?

+0

«что проблема с моим кодом» - вы используете побитовое и. Не знаю, почему, или что вы ожидаете от этого ... уточните. –

+0

Вы видите только нечетные символы ASCII. Довольно буквально. – usr2564301

+0

Название вашего вопроса не соответствует действительности. – emi

ответ

4

Вы должны заботиться о операнде старшинства в if:

char x[]="abcdefghijklmnopqrstuvwxyz"; 
    char y[]="abcdefghijklmnopqrstuvwxyz"; 

    int i,sum=0; 
    const int size = 26; 

    for(i=0;i<size;i++) 
    { 
     if((x[i] & y[i]) == y[i]) 
     { 
      printf("%c",y[i]); 
      sum++; 
     } 
    } 

    printf("\n%d\n",sum); 
+1

и код, как и оригинал, не имеет никакого смысла .... –

+0

Это может быть пример более сложной вещи, например, где ' x! = y'. – emi

+0

да, вы пишете спасибо, но почему я должен писать так, что я всегда пишу это выражение без ошибок –

1

Ваш код не является строго правильным; если каждый x[i] был 0xff, тогда он подумал бы, что каждый символ соответствует. Все, что вы собираетесь обнаружить, - это где-то, что у соответствующего x есть 0, которого нет у соответствующего y.

Если требуется использовать &, для любой академической цели, а затем запустить тест в обоих направлениях:

if((x[i]&y[i])==y[i] && (x[i]&y[i])==x[i]) 

т.е. если нет установленных в y биты, которые также не установлены в xи нет битов, установленных в x, которые также не установлены в y, тогда два должны иметь один и тот же шаблон бит.

Хотя, очевидно:

if(x[i]==y[i]) 

... это предназначенные средства тестирования для равенства в С.

+0

да да вы пишите спасибо –

Смежные вопросы