zoukankan      html  css  js  c++  java
  • 【C语言入门教程】2.6 运算符

    运算符是程序中用于数值运算的操作符,C 语言的运算符可分为 算术运算符、关系与逻辑运算符 和 位操作运算符 这 3 类。

    2.6.1 算术运算符

    算术运算符用来完成基本的数值运算,如 加、减、乘、除,它们可用于所有的数据类型。如下表所示,列出了C语言所有的算术运算符。其中,“-”运算符即能表示两个操作数的减法运算,又能对一个操作数进行取反运算,将正数变为负数,或将负数变为正数。取模运算是取得两数相除的余数。

    2.6.2 自增 和 自减

    自增和自减体现了 C 语言语法的简洁,自增就是在原值的基础上加一,自减则是减一。它的使用格式是“变量++”或“++变量”,等同于“变量 = 变量 + 1”表达式。这两个运算符又称一目运算符,即参与运算的操作数只有一个。自增和自减操作符与变量间的位置不同也会有不同的运算效果,如下例所示:

    int a = 5;					// 声明整型变量并赋值
    printf("a = %d
    ", a++);	// 输出变量的值后,再使变量自增
    printf("a = %d
    " , ++a);	// 变量自增后,再输出变量的值

    代码中第 2 行输出的值为 5,因为先输出了变量的值,然后才使变量的值加 1。而运行到第 3 行时,输出的值为 7,变量在被输出前,已执行了自增运算。

    运算符执行的顺序不同,代表着运算符有着不同的优先级。通常一目算术运算符的优先级最高,其次是基本的算术运算符,加、减、乘、除、取模,它们之间的优先级与算术运算相同,先乘、除、取模后加、减;优先级最低的是赋值运算。自增和自减运算与变量的位置决定着其优先级是最高还是最低。如下例所示:

    int a = 5, b = 7, c = 20;			// 声明整型变量并赋值
    c = c + -a * b -c % b++;			// 使用表达式为变量

    这个例子的运算结果是 -21,代码第 2 行的表达式中最先运算的是 -a,为变量 a 取反,然后是从左向右结合的乘法运算和取模运算,再然后是从左向右结合的加、减法运算,接着是赋值运算,最后才是自增运算。
        如果在表达式之中使用小括号,则会改变优先级,最里层括号内的表达式会被优先计算,但不包括一目运算符。代码如下:

    int a  = 5, b = 7, c = 20;			// 声明整型变量并赋值
    c = c + -a * ( ( b - c ) % b++ );	// 使用表达式为变量

    这个例子的运算结果是 50,因为取反运算符和最里层括号内的表达式 b -c 最先被计算,然后再计算外层括号中的表达式,最后进行加法运算和赋值操作。

    2.6.3 关系 和 逻辑 运算符

    关系运算符用于比较两个数据间的差异,大于、小于 和 等于 是基本的关系运算符。逻辑运算符用于数值间的逻辑演算,与、或、非是基本的逻辑运算符。关系运算符和逻辑运算符关系密切,因此常划为一个类别。C语言中可用的关系和逻辑运算符如下表所示。

    关系 和 逻辑 运算符
    运算符 说明 运算符 说明
    > 大于 != 不等于
    < 小于 &&
    <= 大于或等于 ||
    >= 小于或等于 !
    == 等于    

    注意:或运算符 “||” 是通过两次按下键盘上的竖线输入的,即 “Shift + ”。另外,等于操作符 “==” 和赋值操作符 “=” 的意义完全不同

    关系 和 逻辑 运算符 用 “真” 和 “假” 表示运算结果。C语言中,非 0 的值在关系运算中都可以表示为 “真”, 0 表示为 “假”。它们有一套专门的计算方法,这套计算方法称之为逻辑运算,逻辑运算的结果用整型数据 1 表示 “真”,整型数据 0 表示 “假”。为了计算简便,下表推演出逻辑真值表:

    逻辑真值表
    p q p && q p || q !p
    0 0 0 0 1
    0 非 0 0 1 1
    非 0 非 0 1 1 0
    非 0 0 0 1 0

    该表是根据 p 和 q 的取值来计算逻辑表达式的值。关系 和 逻辑 运算符中,优先级最高的仍然是一目运算符 “!”,其次是关系运算符 “>=” 和 “<=”,再次是 “==” 和 “!=”,其后是 “&&”,最低是 “||”。同算术表达式一样,在关系或逻辑表达式中也可用括号来修改计算顺序。

    2.6.4 位操作符

    位操作是计算机底层的运算方式,与组成计算机的逻辑电路运行模式一致,C 语言支持全部的位操作符。因为 C语言的设计目的是取代汇编语言,所以它必须支持汇编语言所具有的运算能力。位操作是对字节或字中的位进行测试、置位或移位处理,这里字节或字是针对 C 标准中的字符型和整型数据类型而言的。位操作不能用于浮点型、空值或其他复杂类型。下表给出了位操作的操作符。

    位操作符
    运算符 说明 运算符 说明
    & 按位与 1 的补码
    | 按位或 >> 右移
    ^ 按位异或 << 左移

    位操作中的与、或 和 1 的补码的真值表与逻辑运算等同,唯一不同的是位操作是逐位进行运算的,即比较操作数的每一个二进制位。如果两个操作数长度不一样,则将较短的操作数高位全部补 0。位操作增加了异或运算,下表是异或运算的逻辑真值表。

    异或运算逻辑真值表
    p q p ^ q p q p ^ q
    0 0 0 1 1 0
    0 1 1 1 0 1

     

    2.6.5 问号操作符

    问号操作符是最简单的条件语句,格式为:

    条件表达式 ? 表达式 1 : 表达式 2;

    问号操作符是 C 语言内唯一的三目运算符。其作用是在条件表达式为真的情况下,执行表达式 1,否则执行表达式 2。如下例所示:

    int a = 5, b = 7;		// 声明整型变量并赋值
    a > b ? b++ : b--;		// 当 a 大于 b 时,b 自增,否则 b 自减

    显而易见,此例执行了一个表达式 b--。需要说明的是,问号操作符比一般的运算符优先级要低,仅次于后置的自增和自减。

    2.6.6 逗号操作符

    逗号操作符用于将多个表达式连接在一起。逗号操作符的左侧总是作为空值,如果要取得整个表达式的值,只有逗号表达式右侧的值是有效的。如下例所示:

    int a = 5, b = 7;		// 声明整型变量并赋值
    b = ( a + b, a - b );	// 用表达式的结果为变量 b 赋值

    代码第二行,b 的值变为 -2。因为第一个表达式 a + b 的计算结果作为空值被忽略,第二个表达式a - b 的计算结果被赋值给了 b。因为逗号操作符的优先级比赋值操作符优先级低,所以必须使用括号。

    2.6.7 优先级

    下表列出了 C 语言所有操作符的优先级,其中包括将后面要讨论的某些操作符。除一元操作符和问号操作符之外,所有操作符都是左结合的。一元操作符及问号操作符则为右结合。

    C语言操作符的优先级

    优先级最高

    优先级最低

    () [] ->
    ! ~ ++ -- -(type) * & sizeof
    * / %
    + -
    << >>
    <= >=
    == !=
    &
    ^
    |
    &&
    ||
    ?
    = += -= *= /=
    ,
  • 相关阅读:
    LeetCode15 3Sum
    LeetCode10 Regular Expression Matching
    LeetCode20 Valid Parentheses
    LeetCode21 Merge Two Sorted Lists
    LeetCode13 Roman to Integer
    LeetCode12 Integer to Roman
    LeetCode11 Container With Most Water
    LeetCode19 Remove Nth Node From End of List
    LeetCode14 Longest Common Prefix
    LeetCode9 Palindrome Number
  • 原文地址:https://www.cnblogs.com/52php/p/5681157.html
Copyright © 2011-2022 走看看