• C语言-02-基本运算


    一、算术运算

    1. 种类

      1> 加(+),同时可以表示正号
      2> 减(-),同时可以表示负号
      3> 乘(*)
      4>除(/)
      5>取余(%)

    2. 关于类型转换

      1>自动类型转换

      ① char类型和short类型在运算时,要先自动转换为普通整型
      ② 参与运算的多个操作数,如果类型不一致,要先转换为操作数中最
        高级别的类型
      

      2>强制类型转换

      ① 将某种类型强制转换为其他某种类型
      
    3. 使用注意

      1> 算术运算符都为双目运算符,存在左值和右值
      2> 多个操作数参与运算,要进行自动类型转换(转换为最高级别),结果与转换后的类型一致
      3> 除(/)运算符的右值不能为零
      4> 取余(%)运算符的左值和右值必须是整数,且结果的正负性与左值一致
      5> 算术运算符按优先级结合,同等优先级的运算顺序为从左到右

    4. 关于算术运算符的示例(该博文中此示例后的示例,都使用代码块,可本示例的main函数中测试)

      #include<stdio.h>
      

    int main()
    {
    int a1 = 1;
    int a2 = 2;
    short a3 = 3;
    int intResult;

    float b1 = 1.1;
    float b2 = 2.2;
    float floatResult;
    
    char c = 'c';
    
    //自动类型提升
    {
        //a3提升为int类型
        intResult = a1 + a3;
        
        //c提升为int类型
        intResult = a1 + c;
        
        //a1提升为float类型
        floatResult = a1 + b1;
    }
    
    //强制类型转换
    {
        //将a1强制转换为float类型,(提升类型)数值不变
        floatResult = (float)a1;
        
        //将b1强制转换为int类型,(降低类型)数值改变
        intResult = (int)b1;
    }
    
    //关于除(/)运算符
    {
        //结果为整型的0
        intResult = a1 / a2;
        
        //结果为浮点型的0.5
        floatResult = a1 / a2;
        
        //编译时会有警告,警告信息为division by zero is undefined
        //运行时会报错,错误信息为Floating point exception: 8
        //且无法输出floatResult
        floatResult = a1 / 0;     }
    
    //关于取余(%)运算符
    {
        //取余运算又称为模运算,结果为0
        intResult = a1 & a2;
        
        //编译时会报错
        intResult = a1 & b1;
    }
    
    return 0;
    

    }

    
    二、赋值运算
    
     1. 使用注意
    
    	1> 算术运算符为双目运算符,存在左值和右值
    	2> 结合性为从右到左
    	3> 常量不能作为复制运算符的左值
    	4> 赋值时,操作数的精确度不一样,可能会丢失精确度
    	
     2. 关于赋值运算符的示例(用代码块表示示例)
    	
    	
    	```
    	{
            int a = 1;
            int b = 2;
            int intResult;
            
            float d = 1.1;
            float floatResult;
            
            //现将常量10赋值给a,再赋值给b
            b = a = 10;
            
            //丢失精确度,值改变
            intResult = d;
            //不丢失精确度,值不变
            floatResult = a;
            
            //会报错,错误信息expression is not assignable,常量值不可以被改变
            10 = a;
        }
    

    三、自增自减

    1. 种类

      1> 自增(++),等价于 a += 1
      2> 自减(- -),等价于a -= 1

    2. 使用注意

      1> ++a和a++区别:前者是在对a进行其他操作之前自增,后者是在之后
      2>尽量避免出现a + - -b,因为结果依赖于求值顺序

    3. 示例

      //自增自减
      {
          int a = 0;
          int b = 1;
          int result;
          
          //复杂运算 结果为a = 1,b = 0,result = 1
          result = a++ + (--b);
      }
      
    
    四、sizeof
    	
    
     1. 使用注意
    
    	1> sizeof(a),计算变量a(可以为变量或常量)在内存中所占的字节数,由a的类型决定
    	2> 若sizeof用于计算指针类型,无论该指针为何种类型,结果都为该编辑器中指针的长度
    	
     2. 示例
    	
    
    	```
    	{
            int a;
            float b;
            int count;
            
            typedef struct
            {
                int c;
                float d;
            } Ptr;
            Ptr *p;
            
            //结果为4,为整型长度
            count = sizeof(a);
            
            //结果为4,为浮点型长度
            count = sizeof(b);
            
            //结果为8,为指针类型长度
            count = sizeof(p);
        }
    

    五、关系运算

    1. 种类

      1> >、>=
      2> <、<=
      3> !=、==

    2. 使用注意

      1> C语言中没有BOOL类型,用0表示假,非0表示真
      2> 运算顺序为从左到右
      3> 不要把与=弄混,会造成难以发现的错误,使用时,尽量把常量作为左值

    3. 示例

      {
          int a = 1;
          int b = 2;
          int c = 3;
          int d = 3;
          int result;
          
          //验证运算顺序
          result = a<=b>a;
          printf("%d
      ", result);
          
          //使用==时,将常量作为左值
          if (1 == a)
          {
              ; //空语句
          }
      }
      
    
    六、逻辑运算
    	
    
     1. 种类
    
    	1> 或(||),参与运算的操作数,只要有一个为真,结果就为真
    	2> 与(&&),参与运算的操作数,只要有一个为假,结果就为假
    	3> 非(!),将原来的真假性改变为相对的真假性
    	
     2. 使用注意
    
    	1> 结合性从左到右
    	2> 或(||)运算符,只要左值中出现真值,就不再计算后边的表达式
    	3> 与(&&)运算符,只要左值中出现假值,就不再计算后边的表达式
     3. 示例
    	
    
    	```
    	{
            int a = 0;
            int b = 1;
            int c = 2;
            int result;
            
            //或(||),结果为result = 1,c = 2
            result = b || c++;
            
            //与(&&),结果为result = 0,c = 2
            result = a && ++c;
        }
    

    七、三目运算

    1. 使用注意
      1> 为了程序的可读性,尽量不要使用嵌套
      2> 可以转化为相应的if语句

    2. 示例

      {
          int a = 1;
          int b = 2;
          int c = 3;
          int result;
          
          //返回a、b中最大的值
          result = a>b ? a : b;
          
          //嵌套使用,返回a、b、c最大的值,可读性差
          result = (a>b ? a : b)>c ? (a>b ? a : b) : c;
          printf("%d
      ", result);
      }
      
  • 相关阅读:
    半主机模式和_MICROLIB 库
    工作中常用的git命令
    Mybatis延迟加载参数配置
    JUnit展示图形化测试结果
    可读、可维护、可扩展,原则、模式与重构
    乐观锁和悲观锁
    HashMap实现原理和底层数据结构?
    视图有啥用?
    单例模式常见有哪几种?
    RPC服务和HTTP服务的区别
  • 原文地址:https://www.cnblogs.com/theDesertIslandOutOfTheWorld/p/4716558.html
Copyright © 2020-2023  润新知