Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Аналогичный синтаксис в обоих языках программирования.
Similar syntax in both computer languages
Это список операторов в языках программирования C и C++. Все перечисленные операторы (кроме typeof) существуют в C++; столбец "Включено в C" указывает, присутствует ли оператор также в C. Обратите внимание, что C не поддерживает перегрузку операторов. Если операторы &&, || и , (оператор-запятая) не перегружены, после вычисления первого операнда возникает точка последовательности. C++ также содержит операторы преобразования типов const_cast, static_cast, dynamic_cast и reinterpret_cast. Форматирование этих операторов означает, что их уровень приоритета не имеет значения. Большинство операторов, доступных в C и C++, также доступны в других языках семейства C, таких как C#, D, Java, Perl и PHP, с тем же приоритетом, ассоциативностью и семантикой.
This is a list of operators in the C and C++ programming languages. All the operators (except typeof) listed exist in C++; the column "Included in C", states whether an operator is also present in C. Note that C does not support operator overloading. When not overloaded, for the operators &&, ||, and , (the comma operator), there is a sequence point after the evaluation of the first operand. C++ also contains the type conversion operators const cast, static cast, dynamic cast, and reinterpret cast. The formatting of these operators means that their precedence level is unimportant. Most of the operators available in C and C++ are also available in other C family languages such as C#, D, Java, Perl, and PHP with the same precedence, associativity, and semantics.
Таблица
Для целей этих таблиц a, b и c обозначают допустимые значения (литералы, значения переменных или возвращаемые значения), имена объектов или l-значения, в зависимости от контекста. R, S и T обозначают любой тип или типы, а K – класс или перечислимый тип. Некоторые операторы имеют альтернативные написания с использованием диграфов и триграфов или синонимов операторов.
For the purposes of these tables, a, b, and c represent valid values (literals, values from variables, or return value), object names, or lvalues, as appropriate. R, S and T stand for any type(s), and K for a class type or enumerated type. Some of the operators have alternative spellings using digraphs and trigraphs or operator synonyms.
Операторы по битам
Все битовые операторы существуют в C и C++ и могут быть перегружены в C++. Имя оператора Синтаксис Примеры прототипа Как член K За пределами определений класса Битовое НЕ ~a Битовое И a & b Битовое ИЛИ a | b Битовое исключающее ИЛИ a ^ b Битовый сдвиг влево использует арифметический сдвиг (т.е. расширение знака), но возможен и логический сдвиг. a >> b
All bitwise operators exist in C and C++ and can be overloaded in C++. Operator name Syntax Prototype examples As member of K Outside class definitions Bitwise NOT ~a Bitwise AND a & b Bitwise OR a | b Bitwise XOR a ^ b Bitwise left shift use an arithmetic shift (i. e., sign extension), but a logical shift is possible. a >> b
Критика преимущества операторов по бит и равенства
Преимущество битовых логических операторов подвергается критике. Концептуально, & и | являются арифметическими операторами, как * и +. Выражение синтаксически разбирается как (a & b) | c, тогда как выражение a & (b | c) разбирается как (a & b) | c. Это требует использования скобок чаще, чем это было бы необходимо. Исторически, синтаксического различия между битовыми и логическими операторами не существовало. В BCPL, B и ранних версиях C операторов && и || не существовало. Вместо этого & и | имели различное значение в зависимости от контекста использования – в контексте истинности (то есть, когда ожидалось булево значение, например, в if(a & b) они работали как логические операторы, а в a & b – как битовые). Они были сохранены для обеспечения обратной совместимости с существующими системами. Более того, в C++ (и последующих версиях C) операции равенства, за исключением оператора трехстороннего сравнения, возвращают значения типа bool, которые концептуально представляют собой один бит (1 или 0) и, следовательно, не вполне соответствуют "битовым" операциям.
The precedence of the bitwise logical operators has been criticized. Conceptually, & and | are arithmetic operators like * and +. The expression is syntactically parsed as whereas the expression is parsed as This requires parentheses to be used more often than they otherwise would. Historically, there was no syntactic distinction between the bitwise and logical operators. In BCPL, B and early C, the operators didn't exist. Instead had different meaning depending on whether they are used in a 'truth value context' (i. e. when a Boolean value was expected, for example in it behaved as a logical operator, but in it behaved as a bitwise one). It was retained so as to keep backward compatibility with existing installations. Moreover, in C++ (and later versions of C) equality operations, with the exception of the three way comparison operator, yield bool type values which are conceptually a single bit (1 or 0) and as such do not properly belong in "bitwise" operations.