zoukankan      html  css  js  c++  java
  • C语言基础知识-运算符与表达式

                C语言基础知识-运算符与表达式

                                          作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.常用运算符分类

    1>.算术运算符

        用于处理四则运算。

    2>.赋值运算符

        用于将表达式的值赋给变量。

    3>.比较运算符

        用于表达式的比较,并返回一个真值或假值。

    4>.逻辑运算符

        用于根据表达式的值返回真值或假值

    5>.位运算符

        用于处理数据的位运算。

    6>.sizeof运算符

        用于求字节数长度。

     

    二.算术运算符

    运算符          术语           示例          结果
     +           正号            +3           3
     -           负号            -3           -3
     +           加            10 + 5         15
     -           减            10 - 5         10
     *           乘            10 * 5         50
     /           除            10 / 5         2
     %           取模(取余)       10 % 3         1
     ++           前自增          a=2,b=++a;      a=3;b=3;
     ++           后自增          a=2,b=a++;      a=3;b=2;
     --           前自减          a=2;b=--a;      a=1;b=1;
     --           后自减          a=2;b=a--;      a=1;b=2;
       

    三.赋值运算符

    运算符          术语           示例          结果
    =           赋值           a=2;b=3        a=2;b=3;
     +=          加等于          a=0;a+=2;       a=2;
     -=           减等于          a=5;a-=3;       a=2;
    *=           乘等于          a=2;a*=2;       a=4;
    /=           除等于          a=4;a/=2;       a=2;    
     %=           模等于          a=3;a%2;        a=1;

    四.比较运算符

    运算符          术语           示例          结果("真"用数字"1"来表示,"假"用数字"0"来表示)
    ==           相等于          4==3          0
    !=           不等于          4!=3          1
    <            小于           4<3           0
    >            大于           4>3           1
    <=           小于等于         4<=3           0
    >=           大于等于         4>=1           1

    五.逻辑运算符

    运算符          术语           示例          结果
     !            非            !=          如果a为假,则!a为真,如果为真,则!a为假。
     &&            与           a && b         如果a和b都为真,则结果为真,否则为假。
     ||            或           a || b        如果a和b有一个为真,则结果为真,二者都为假时,结果为假。

    六.运算符优先级

    说明:
      同一优先级的运算符,结合次序由结合方向所决定。
      简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
    
      详情请参考:https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7/4752611?fr=aladdin
    优先级
    运算符
    名称或含义
    使用形式
    结合方向
    说明
    1
    []
    数组下标
    数组名[整型表达式]
    左到右
     
    ()
    圆括号
    (表达式)/函数名(形参表)
     
    .
    成员选择(对象)
    对象.成员名
     
    ->
    成员选择(指针)
    对象指针->成员名
     
    2
    -
    负号运算符
    -算术类型表达式
    右到左
    单目运算符
    (type)
    强制类型转换
    (纯量数据类型)纯量表达式
     
    ++
    自增运算符
    ++纯量类型可修改左值表达式
    单目运算符
    --
    自减运算符
    --纯量类型可修改左值表达式
    单目运算符
    *
    取值运算符
    *指针类型表达式
    单目运算符
    &
    取地址运算符
    &表达式
    单目运算符
    !
    逻辑非运算符
    !纯量类型表达式
    单目运算符
    ~
    按位取反运算符
    ~整型表达式
    单目运算符
    sizeof
    长度运算符
    sizeof 表达式
    sizeof(类型)
     
    3
    /
    表达式/表达式
    左到右
    双目运算符
    *
    表达式*表达式
    双目运算符
    %
    余数(取模)
    整型表达式%整型表达式
    双目运算符
    4
    +
    表达式+表达式
    左到右
    双目运算符
    -
    表达式-表达式
    双目运算符
    5
    <<
    左移
    整型表达式<<整型表达式
    左到右
    双目运算符
    >>
    右移
    整型表达式>>整型表达式
    双目运算符
    6
    >
    大于
    表达式>表达式
    左到右
    双目运算符
    >=
    大于等于
    表达式>=表达式
    双目运算符
    <
    小于
    表达式<表达式
    双目运算符
    <=
    小于等于
    表达式<=表达式
    双目运算符
    7
    ==
    等于
    表达式==表达式
    左到右
    双目运算符
    !=
    不等于
    表达式!= 表达式
    双目运算符
    8
    &
    按位与
    整型表达式&整型表达式
    左到右
    双目运算符
    9
    ^
    按位异或
    整型表达式^整型表达式
    左到右
    双目运算符
    10
    |
    按位或
    整型表达式|整型表达式
    左到右
    双目运算符
    11
    &&
    逻辑与
    表达式&&表达式
    左到右
    双目运算符
    12
    ||
    逻辑或
    表达式||表达式
    左到右
    双目运算符
    13
    ?:
    条件运算符
    表达式1? 表达式2: 表达式3
    右到左
    三目运算符
    14
    =
    赋值运算符
    可修改左值表达式=表达式
    右到左
     
    /=
    除后赋值
    可修改左值表达式/=表达式
     
    *=
    乘后赋值
    可修改左值表达式*=表达式
     
    %=
    取模后赋值
    可修改左值表达式%=表达式
     
    +=
    加后赋值
    可修改左值表达式+=表达式
     
    -=
    减后赋值
    可修改左值表达式-=表达式
     
    <<=
    左移后赋值
    可修改左值表达式<<=表达式
     
    >>=
    右移后赋值
    可修改左值表达式>>=表达式
     
    &=
    按位与后赋值
    可修改左值表达式&=表达式
     
    ^=
    按位异或后赋值
    可修改左值表达式^=表达式
     
    |=
    按位或后赋值
    可修改左值表达式|=表达式
     
    15
    ,
    逗号运算符
    表达式,表达式,…
    左到右
    从左向右顺序结合
     

    七.类型转换

     

    数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。
    
    转换的方法有两种:
        自动转换(隐式转换):遵循一定的规则,由于编译系统自动完成。
        强制类型转换:把表达式的运算结果强制转换成所需的数据类型。
    
      
    类型转换的原则:
        占用内存字节数少(或域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精确度不降低。

    1>.隐式转换

    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# cat type_demo.c 
    /*
    @author :yinzhengjie
    blog:http://www.cnblogs.com/yinzhengjie
    EMAIL:y1053419035@qq.com
    */
    
    #include <stdio.h>
    
    int main(void)
    {
        int num = 5;
        printf("s1=%d
    ",num/2);
        printf("s2=%1f
    ",num/2.0);
        return 0;        
    }
    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# 
    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# gcc -o type_demo type_demo.c 
    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# 
    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# 
    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# ./type_demo 
    s1=2
    s2=2.500000
    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# 

    2>.强制转换

    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# cat type_demo2.c 
    /*
    @author :yinzhengjie
    blog:http://www.cnblogs.com/yinzhengjie
    EMAIL:y1053419035@qq.com
    */
    
    #include <stdio.h>
    
    int main(void)
    {
        //强制类型转换指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型,其基本语法格式为:(类型说明符)(表达式)
        float x = 0;
        int i = 0;
        x = 3.6f;
        i = x;        //x为实型,i为整型,直接复制会有告警
        i =(int)x;    //使用强制类型转换
        printf("x=%f,i=%d
    ",x,i);
            
    
        return 0;        
    }
    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# 
    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# gcc -o type_demo2 type_demo2.c 
    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# 
    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# 
    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# ./type_demo2 
    x=3.600000,i=3
    [root@node101.yinzhengjie.org.cn /yinzhengjie/code/day002]# 
  • 相关阅读:
    Spring框架学习09——基于AspectJ的AOP开发
    Spring框架学习08——自动代理方式实现AOP
    Spring框架学习07——基于传统代理类的AOP实现
    Spring框架学习06——AOP底层实现原理
    Spring框架学习05——AOP相关术语详解
    SpringMVC框架09——@ResponseBody的用法详解
    Spring框架学习04——复杂类型的属性注入
    Spring框架学习03——Spring Bean 的详解
    Spring框架学习01——使用IDEA开发Spring程序
    sqlserver 迁移
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/10982904.html
Copyright © 2011-2022 走看看