zoukankan      html  css  js  c++  java
  • 【Tutorial C】05 操作符 & 表达式

    基本运算符

    C使用运算符(operator)来代表算术运算。例如,+运算符可以使它两侧的值加在一起。

    如果您觉得术语“运算符”听起来比较奇怪,那么请您记住那些东西总得有个名称。

    与其被称之为“那些东西”或“数学符号”,被称之为“运算符”似乎看起来更专业一些!

    现在,除此之外,让我们再看一下其他的基本运算符 

    赋值运算符

    在C里,符号=不表示“相等”,而是一个赋值运算符。

    下面的语句是将2014赋给num的变量。 

    num=2014; 

    也就是说,符号=的左边是一个变量名,右边是赋给该变量的值。

    符号=被称为赋值运算符(assignment operator)。

    再次强调不要把这行代码读做“num等于2014”,而应该读为“将值2014赋给变量num”。赋值运算符的动作是从右到左。 

    或许变量的名字和变量值之间的区别看起来微乎其微,但是请考虑下面的常量计算机语句: 

    i=i+1; 

    在数学上,该语句没有任何意义。如果您给一个有限的数加1,结果不会“等于”这个数本身。

    它意味着“找到名字为i的变量的值:然后对那个值加1,然后将这个新值赋给名字为i的变量”。 

    像下面的这条语句: 

    2014=num; 


    在C中是没有意义的(确切的说是无效的),原因是2014只是一个常量。

    您不能将一个值赋给一个常量;那个常量本身就是它的值了。

    所以,当您准备键入代码时请记住在符号=左边的项目必须是一个变量的名字。

    实际上,赋值运算符左边必须指向一个存储位置。

    最简单的方法是使用变量的名字,但是以后您会看到,“指针”也可以指向一个存储位置。

    更普遍地,C使用术语“可修改的左值”(modifiable Ivalue)来标志那些我们可以为之赋值的实体。

    “可修改的左值”或许不是那么直观易懂,所以我们先看看一些定义。 

    几个术语:数据对象、左值、右值和操作数

    “数据对象“(data object)是泛指数据存储区的术语,数据存储区能用于保存值。

    例如,用于保存变量或数组的数据存储区是一个数据对象。C的术语左值(lvalue)指用于标识一个特定的数据对象的名字或表达式。

    例如,变量的名字是一个左值。所以对象指的是实际的数据存储,但是左值是用于识别或定位那个存储的标识符。 

    因为不是所有的对象都是可更改值的,所以C使用术语”可修改的左值“来表示那些可以被更改的对象。

    所以,赋值运算符的左值应该是一个可修改的左值。lvalue中的l确实是英文单词left的意思,因为可修改的左值可以用在赋值运算符的左边。 

    术语"右值"(rvalue)指的是能赋给可修改的左值的量。

    例如,考虑下面的语句: 

    num=2014

    这里是一个可修改的左值,2014是一个右值。

    您可能猜到rvalue中的r表示right。右值可以是常量、变量或者任何可以产生一个值的表达式。 

    我们可以把变量理解为一个容器,放在左边当左值时,意思为保存、存放右边的值。

    所以,我们可以说=运算符的左操作数是可修改的左值。 

    数学运算符

    主要包括: 

      单目运算符:只需要一个操作数 

      自增:++ 自减: -- 

      双目运算符:需要两个操作数 

      加法:+ 减法:- 乘法: * 除法: / 求模:% 

      增量和减量运算符: ++和-- 

    “增量运算符”(increment operator)完成简单的任务,即将其操作数的值增加1。

    这个运算符以两种方式出现。在第一种方式中,++出现在它作用的变量的前面,这是前缀(prefix)模式.在第

    二种方式中,++出现在它作用的变量的后面,这是后缀(postfix)模式。

    这两种模式的区别在于值的增加这一动作发生的准确时间不同。

    对于前缀运算符,先执行自增或自减运算,再计算表达式的值,而后缀运算符,则先计算表达式的值,再执行自增或自减运算。 

    我们通过例子来说明: 

    #include<stdio.h>
    int main()
    {
            int a,b;
            a=b=5;
            printf("%d      %d
    ",a--,--b);
            printf("%d      %d
    ",a--,--b);
            printf("%d      %d
    ",a--,--b);
            printf("%d      %d
    ",a--,--b);
            printf("%d      %d
    ",a--,--b);
            return 0;
    }

    这个程序5次将变量a和b减1,您可以通过这个结果来理解前缀和后缀的区别。 

    需要提醒一下的是,++与--是单目运算符,即一个操作对象,而这个操作对象只能为变量

    因为,常量不可以被赋值。

    样例

    #include<stdio.h>
    int main()
    {
            int a=20;
            int b=5;
            int c=6;
            printf("a = %d b = %d c = %d
    ",a,b,c);
            printf("a + b = %d
    ",a+b);
            printf("a - c = %d
    ",a-c);
            printf("a * b = %d
    ",a*b);
            printf("a / c = %d
    ",a/c);
            printf("a %% c = %d
    ",a%c);/*两个%才会输出一个%*/
            return 0;
    }

    sizeof运算符

    C中大约有40个运算符,其中有些运算符比其他运算符要常用的多。

    我们前面已经讨论的那些是最常用的,现在我们将继续介绍几个比较有用的运算符。 

    常年被人误认为函数的关键字"sizeof" 

    sizeof是C语言的32个关键字之一,并非“函数”(我们会后面介绍),也叫长度(求字节)运算符,

    sizeof是一种单目运算符,以字节为单位返回某操作数的大小,用来求某一类型变量的长度。

    其运算对象可以是任何数据类型或变量。 

    样例:

    #include<stdio.h>
    int main()
    {
            int n=0;
            int intsize = sizeof(int);
            printf("int sizeof is %d bytes
    ",intsize);
            return 0;
    }

    三目运算符

    下面给大家介绍一下三目运算符

    首先介绍一个概念,所谓的“目”是指这个运算符参与运算的对象个数

    比如前面我们介绍了+、-、*、等等运算符,这些需要两个数或者变量运算,所以就属于双目运算符;

    而++和--一个对象就可以组合,这种就是单目运算符,很好理解,

    那么今天所提到的三目,当然就是有三个对象参与运算了!

    这可是C语言当中唯一一个三目运算符哦,就是选择运算符

    它的一般形式是通过?和:两个符合组合而成的,一般形式如下:

    表达式1?表达式2:表达式3

    什么意思呢,首先会计算表达式1的值,看看是真还是假,也就是成立还是不成立,

    如果表达式1成立,那么这个三目运算符整体的值呢就是表达式2的值,

    否则(也就是表达式1不成立),这个三目运算符整体的值就是表达式3的值。

    怎么样,看明白了吗?  下面举个例子说明一下:

    2>1?10:20

    这个表达式整体的值是几呢,答案应该是10,应为2>1成立,

    因此它的值就是表达式2的值!就是10

    int a=3,b=5;
    int c=10;
    c?:(a+b):(a-b)

    这个表达式的值呢,大家先算算,应该是8,为什么呢,

    因为表达式1也就是c的值(10)为真,所以就是表达式2的值也就是a+b就是8。

    这下大家明白了吧!

    这就是三目运算符的用法,大家可以理解一下!

    其实本质上是一种选择结构,根据表达式1的成立与否,决定是表达式2还是表达式3,

    大家理解一下然后上机实验一下!

    表达式和语句

    在此之前,我们多次用到了术语表达式和语句,现在我们需要深刻的理解他们了,语句是组成C的基本单位,并且大多数语句由表达式构成。

    所以,我们有必要对表达式进一步学习。

    表达式

    表达式(expression)是由运算符和操作数组合构成的(回忆一下,操作数是运算符操作的对象)。

    最简单的表达式即一个单独的操作数,以此作为基础可以建立复杂的表达式,

    比如下面这些: 

    3+2 
    
    a=(2+b/3)/5 
    
    x=i++ 
    
    m=2*5 

    正如您看到的一样,操作数可以是常量,也可以是变量,亦可以是他们的组合。

    一些表达式是多个较小的表达式的组合,这些小的表达式称为子表达式(subexpression)。

    每个表达式都有一个值

    C中一个重要的属性是每一个C表达式都有一个值。

    为了得到这个值,您可以按照运算服优先级描述的顺序来完成运算。

    我们所列出的前几个表达式的值都很明显,但是有=的表达式的值是什么呢?

    那些表达式与=左边的变量取得的值相同。

    所以,表达式m=2*5作为一个表达式,其整体的值为10。 

    语句

    语句(statement)是构造程序的基本部分。

    程序(program)是一系列带有某种必须的标点语句集合。

    一个语句是一条完整的计算机指令。

    在C中,语句用结束处的一个分号标示。 

    c=3 

    这只是一个表达式(它可能是一个较大语句的一个部分),而c=3;则是一个语句。 

    想必您应该已经看到了,没错,表达式后面加一个分号即构成了一条C语句(它们被称为表达式语句)。

    所以,C不反对像下面的语句: 

    1;
    2+2;

    https://www.dotcpp.com/course/20

  • 相关阅读:
    推荐网页布局设计流程
    (IE6下)png透明问题分析及解决办法
    [收藏]几个常用的用正则表达式验证字符串的函数
    JavaScript 操作 Cookie
    javascript 获取控件的绝对位置
    Css命名规范
    掌握JavaScript语言的思想前提
    高效的Javascript 字符串操作类
    常用正则表达式
    简单的dom遍历
  • 原文地址:https://www.cnblogs.com/mindzone/p/12921218.html
Copyright © 2011-2022 走看看