运算符优先级 订阅
在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。 [1] 展开全文
在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。 [1]
信息
外文名
Operator Precedence
一元运算符
只须一个操作数就能执行的运算符
结合次序
表达式中各种运算符的优先级
中文名
运算符优先级
单目运算符
具有相同的优先级
最高优先级
是一类特殊的操作
运算符优先级简介
每种同类型的运算符都有内部的运算符优先级,不同类型的运算符之间也有相应的优先级顺序。一个表达式中既可以包括相同类型的运算符,也可以包括不同类型的运算符或者函数。当多种运算符出现在同一个表达式中时,应该先按照不同类型运算符间的优先级进行运算。各种运算符间的优先级如下:数值运算符、字符串运算符、关系运算符、逻辑运算符。可以用括号改变优先级顺序,使得括号内的运算优先于括号外的运算。对于多重括号,总是由内到外强制表达式的某些部分优先运行。括号内的运算总是最优先计算。 [2] 
收起全文
精华内容
下载资源
问答
  • 运算符优先级

    千次阅读 2019-06-12 00:10:29
    运算符优先级

    优先级可能会有问题吧,如果我没记错的话,应该是没问题的!!吧?算了算了,稳妥起见还是加括号吧,好无奈。每次都这样,记了忘,忘了又记,如此反复…好记性不如烂笔头,还是总结下备忘。

    1 常见运算符


    1、四则运算运算符

    • +
    • -
    • *
    • /
    • %

    2、移位运算符

    • >> (右移)
    • << (左移)

    3、关系运算符

    • >
    • <
    • >=
    • <=
    • ==
    • !=

    4、逻辑位运算符

    • & (按位与)
    • | (按位或)
    • ^ (按位异或)
    • ~ (按位非)

    5、逻辑运算符

    • &&
    • ||
    • !

    6、赋值运算符

    • =
    • +=
    • -=
    • +=
    • /=
    • %=
    • &=
    • |=
    • ^=
    • >>=
    • <<=

    7、自增自减运算符

    • a++
    • ++a
    • a--
    • --a

    8、动态内存分配运算符

    • new
    • new []
    • delete
    • delete []

    9、类型转换运算符

    • type() (函数风格转型)
    • (type) (C 风格转型)

    10、成员访问运算符

    • .(前面有个
    • ->

    11、取值、取地址、取大小运算符

    • *
    • &
    • sizeof

    12、其它

    • :: (作用域运算符)
    • a() (函数调用)
    • [] (下标)
    • ? : (三元条件)

    2 代码(部分,遇到好的示例会更新)


    #include <iostream>
    using namespace std;
    
    int main()
    {
    	cout << "-----四则运算运算符 vs 移位运算符-----" << endl;
    	cout << "1 << 2 + 3: " << (1 << 2 + 3) << endl;
    	cout << "1 << 2 * 2: " << (1 << 2 * 2) << endl;
    	cout << "四则运算运算符 +、-、*、/、%优先级大于移位运算符 <<、>>" << endl << endl;
    
    	cout << "-----移位运算符 vs 比较运算符-----" << endl;
    	cout << "3 > 1 << 2: " << (3 > 1 << 2) << endl;
    	cout << "3 > 1 << 2: " << (1 == 1 << 2) << endl;
    	cout << "移位运算符 <<、>> 优先级大于比较运算符 >、<、>=、<=、==、!=" << endl << endl;
    
    	cout << "-----逻辑位运算符 vs 比较运算符-----" << endl;
    	cout << "5 | 2 > 1: " << (5 | 2 > 1) << endl;
    	cout << "逻辑位运算符 &、|、^ 优先级小于比较运算符 >、<、>=、<=、==、!=" << endl;
    	cout << "~(7 > 8): " << (~(7 > 8)) << endl;
    	cout << "~7 > 8: " << (~7 > 8) << endl;
    	cout << "逻辑位运算符还包括 ~ ,其为单目运算符,优先级高于比较运算符" << endl << endl;
    
    	cout << "-----逻辑位运算符 vs 逻辑运算符-----" << endl;
    	cout << "1 && 1 | 7: " << (1 && 1 | 7) << endl;
    	cout << "逻辑位运算符 &、|、^ 优先级大于逻辑运算符 &&、||" << endl;
    	cout << "1 && 1 | 7: " << (!0 | 7) << endl;
    	cout << "逻辑位运算符还包括 ! ,其为单目运算符,优先级高于逻辑位运算符" << endl << endl;
    
    	cout << "-----比较运算符之间优先级-----" << endl;
    	cout << "3 > 1 == 8 < 4: " << (3 > 1 == 8 < 4) << endl;
    	cout << "3 > 1 != 8 < 0: " << (3 > 1 != 8 < 0) << endl;
    	cout << " ==、!= 优先级低于 >、<、>=、<=、" << endl << endl;
    	system("pause");
        return 0;
    }
    
    //输出
    -----四则运算运算符 vs 移位运算符-----
    1 << 2 + 3: 32
    1 << 2 * 2: 16
    四则运算运算符 +、-、*、/、%优先级大于移位运算符 <<、>>
    
    -----移位运算符 vs 比较运算符-----
    3 > 1 << 2: 0
    3 > 1 << 2: 0
    移位运算符 <<、>> 优先级大于比较运算符 >、<、>=、<=、==、!=
    
    -----逻辑位运算符 vs 比较运算符-----
    5 | 2 > 1: 5
    逻辑位运算符 &、|、^ 优先级小于比较运算符 >、<、>=、<=、==、!=
    ~(7 > 8): -1
    ~7 > 8: 0
    逻辑位运算符还包括 ~ ,其为单目运算符,优先级高于比较运算符
    
    -----逻辑位运算符 vs 逻辑运算符-----
    1 && 1 | 7: 1
    逻辑位运算符 &、|、^ 优先级大于逻辑运算符 &&、||
    1 && 1 | 7: 7
    逻辑位运算符还包括 ! ,其为单目运算符,优先级高于逻辑位运算符
    
    -----比较运算符之间优先级-----
    3 > 1 == 8 < 4: 0
    3 > 1 != 8 < 0: 1
     ==、!= 优先级低于 >、<、>=、<=、
    

    3 结论


    0、优先级

    • 单目运算符 > 双目运算符 > 三目运算符;

    1、单目运算符优先级

    • 结合性规定对于一元运算符是冗余的,只为完备而给出:一元前缀运算符 始终 从右到左 结合,delete ++*p 被解释为 delete(++(*p)) ;而 一元后缀运算符 始终 从左到右 结合,a[1][2]++ 被解释为 ((a[1])[2])++

    2、双目运算符优先级

    • 四则运算运算符 > 移位运算符 > 关系运算符 > 逻辑位运算符 > 逻辑运算符 > 赋值运算符;
    • 四则运算符中,+、- 优先级低于 *、/、%;
    • 比较运算符中,==、!= 优先级低于 >、<、>=、<=;

    3、三目运算符优先级

    • C 中,三元条件运算符拥有高于赋值运算符的优先级。因此,表达式 e = a < d ? a++ : a = d 在 C++ 中剖析成 e = ((a < d) ? (a++) : (a = d)),但在 C 中会由于 C 的语法或语义制约而编译失败;

    4、其它

    • 拥有相同优先级的运算符以其结合性的方向与各参数绑定。例如表达式 a = b = c 被分析为 a = (b = c) 而非 (a = b) = c,因为赋值具有从右到左结合性,但 a + b - c 被分析为 (a + b) - c 而非 a + (b - c),因为加法和减法具有从左到右结合性。

    4 参考文献


    https://zh.cppreference.com/w/cpp/language/operator_precedence

    展开全文
  • 运算符优先级-C语言运算符优先级

    千次阅读 2015-11-30 13:49:56
    运算符优先级-C语言运算符优先级


    C语言运算符优先级
    优先级 运算符 描述 方向
    1 ++ -- Suffix/postfix increment and decrement-前缀/后缀递增和递减 Left-to-right
    () Function call-函数调用
    [] Array subscripting-数组下标
    . Structure and union member access-结构和联盟成员的访问
    −> Structure and union member access through pointer-结构和联盟成员通过指针访问
    (type){list} Compound literal(C99)-复合文字(C99)
    2 ++ -- Prefix increment and decrement-前缀递增和递减 Right-to-left
    + − Unary plus and minus-+和-
    ! ~ Logical NOT and bitwise NOT-逻辑不是和逐位
    (type) Type cast-类型转换
    * Indirection (dereference)-间接(废弃)
    & Address-of-取地址
    sizeof Size-of-占用字符
    _Alignof Alignment requirement(C11)-对齐需求(C11)
    3 * / % Multiplication, division, and remainder-乘、除、余 Left-to-right
    4 + − Addition and subtraction-加法和减法
    5 << >> Bitwise left shift and right shift-位左移和右移
    6 < <= For relational operators < and ≤ respectively-关系运算符
    > >= For relational operators > and ≥ respectively-关系运算符
    7 == != For relational = and ≠ respectively-关系运算符
    8 & Bitwise AND-位和
    9 ^ Bitwise XOR (exclusive or)-位XOR(异或)
    10 | Bitwise OR (inclusive or)-按位或(包括)
    11 && Logical AND-逻辑和
    12 || Logical OR-逻辑或
    13 ?: Ternary conditional-三元运算符 Right-to-Left
    14 = Simple assignment-赋值
    += −= Assignment by sum and difference-赋值运算符
    *= /= %= Assignment by product, quotient, and remainder-赋值运算符
    <<= >>= Assignment by bitwise left shift and right shift-赋值运算符
    &= ^= |= Assignment by bitwise AND, XOR, and OR-赋值运算符
    15 , Comma Left-to-right

    展开全文
  • 运算符优先级-Java 运算符优先级


    Java 运算符优先级
    运算符 优先级
    postfix(后缀) expr++ expr--
    unary(前缀) ++expr --expr +expr -expr ~ !
    multiplicative(乘,除,余) * / %
    additive(加减) + -
    shift(移位) << >> >>>
    relational(关系) < > <= >= instanceof
    equality(比较) == !=
    bitwise AND(位和) &
    bitwise exclusive OR(异或) ^
    bitwise inclusive OR(位包容或) |
    logical AND(和) &&
    logical OR(或) ||
    ternary(三元表达式) ? :
    assignment(赋值表达式) = += -= *= /= %= &= ^= |= <<= >>= >>>=

    展开全文
  • 运算符优先级-Python 运算符优先级 .Net


    Python 运算符优先级
    运算符 描述
    lambda Lambda表达式
    or 布尔“或”
    and 布尔“与”
    not x 布尔“非”
    in,not in 成员测试
    is,is not 同一性测试
    <,<=,>,>=,!=,== 比较
    | 按位或
    ^ 按位异或
    & 按位与
    <<,>> 移位
    +,- 加法与减法
    *,/,% 乘法、除法与取余
    +x,-x 正负号
    ~x 按位翻转
    ** 指数
    x.attribute 属性参考
    x[index] 下标
    x[index:index] 寻址段
    f(arguments...) 函数调用
    (experession,...) 绑定或元组显示
    [expression,...] 列表显示
    {key:datum,...} 字典显示
    'expression,...' 字符串转换

    展开全文
  • 运算符优先级-PHP运算符优先级
  • 运算符优先级-C++运算符优先级

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,458
精华内容 6,983
关键字:

运算符优先级