2016-10-19 8 views
-4

Я писал код C для задания в школе и наткнулся на ошибку, которая на самом деле сильно меня озадачила. Ниже приведен фрагмент кода, вызывающий проблемы.В чем разница между <и << в C?

int i, result = 1; 
for(i = 0; i < n; i++) 
{ 
    if(a[i]<< 15 || a[i] >> 50) 
     result = 0; 
} 

Каждый раз, когда я пытался запустить мою программу, я хотел бы видеть предупреждение, что 50 был слишком большим для моего типа данных. Зная, что я использую тип int и что число 50 можно легко сохранить в int, я предположил, что он ожидает значение меньше 32, поскольку int является 32-байтовым типом. Я попытался использовать число 20 вместо 50 и не получил ошибок. Затем я заменил двойные знаки «<» и «>» синглами, и код работал отлично. Мне было интересно, может ли кто-нибудь пролить свет на то, почему это так? Я новичок в C и просто сделал снимок в темноте, что дополнительные символы «<» и «>» были проблемой, но я хотел бы знать, почему это сработало!

+1

Реальный вопрос, почему вы попытаетесь сравнить с >> или << в первую очередь. Но вы можете искать операторов на C в любой книге или учебнике и посмотреть, что они делают за секунду. –

ответ

0

">" и "<" являются реляционными операторами, где ">>" и "< <" являются побитовыми операторами.

0

реляционные операторы в C:

==,>, <,> =, < = =

побитовое операторы в C:

&, ~ , ^, < <, >>, |

Для получения более подробной информации: Relational operators in C Bitwise operators in C

В данной программе, а [я] < < 15 будет сдвиг влево двоичное значение а [я] и вывести так а [я] >> 50 будет делать 50 Правый сдвиг двоичного значения a [i].

Как указано выше, >> и < < являются побитовыми операторами, не являющимися реляционными операторами.

Надеюсь, это поможет!

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