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

    C语言运算符

        运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C语言内置了丰富的运算符,并提供了以下类型的运算符。文章就以下运算符展开介绍。

    • 算术运算符
    • 关系运算符
    • 逻辑运算符
    • 位运算符
    • 赋值运算符
    • 杂项运算符

    一、C语言运算符
    C语言运算符.png

       示例如下:

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            
            int a = 21;
            int b = 10;
            int c ;
            
            c = a + b;
            printf("Line 1 - c 的值是 %d
    ", c );
            c = a - b;
            printf("Line 2 - c 的值是 %d
    ", c );
            c = a * b;
            printf("Line 3 - c 的值是 %d
    ", c );
            c = a / b;
            printf("Line 4 - c 的值是 %d
    ", c );
            c = a % b;
            printf("Line 5 - c 的值是 %d
    ", c );
            c = a++;  // 赋值后再加 1 ,c 为 21,a 为 22
            printf("Line 6 - c 的值是 %d
    ", c );
            c = a--;  // 赋值后再减 1 ,c 为 22 ,a 为 21
            printf("Line 7 - c 的值是 %d
    ", c );
            
            /*
             这里区分一下a++和++a的区别
             c = a++,先赋值后运算
             c = ++a,先运算后赋值
             */
            
        }
        return 0;
    }
    
    

       预算结果为:

    Line 1 - c 的值是 31
    Line 2 - c 的值是 11
    Line 3 - c 的值是 210
    Line 4 - c 的值是 2
    Line 5 - c 的值是 1
    Line 6 - c 的值是 21
    Line 7 - c 的值是 22
    Program ended with exit code: 0
    
    二、关系运算符
    关系运算符.png

       示例如下:

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            
            int a = 21;
       int b = 10;
       int c ;
     
       if( a == b )
       {
          printf("Line 1 - a 等于 b
    " );
       }
       else
       {
          printf("Line 1 - a 不等于 b
    " );
       }
       if ( a < b )
       {
          printf("Line 2 - a 小于 b
    " );
       }
       else
       {
          printf("Line 2 - a 不小于 b
    " );
       }
       if ( a > b )
       {
          printf("Line 3 - a 大于 b
    " );
       }
       else
       {
          printf("Line 3 - a 不大于 b
    " );
       }
       /* 改变 a 和 b 的值 */
       a = 5;
       b = 20;
       if ( a <= b )
       {
          printf("Line 4 - a 小于或等于 b
    " );
       }
       if ( b >= a )
       {
          printf("Line 5 - b 大于或等于 b
    " );
       }
            
        }
        return 0;
    }
    
    

       运算结果为:

    Line 1 - a 不等于 b
    Line 2 - a 不小于 b
    Line 3 - a 大于 b
    Line 4 - a 小于或等于 b
    Line 5 - b 大于或等于 b
    Program ended with exit code: 0
    
    
    三、逻辑运算符
    逻辑运算符.png

       示例如下:

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
        
        int a = 5;
        int b = 20;
        int c ;
     
       if ( a && b )
       {
          printf("Line 1 - 条件为真
    " );
       }
       if ( a || b )
       {
          printf("Line 2 - 条件为真
    " );
       }
       /* 改变 a 和 b 的值 */
       a = 0;
       b = 10;
       if ( a && b )
       {
          printf("Line 3 - 条件为真
    " );
       }
       else
       {
          printf("Line 3 - 条件不为真
    " );
       }
       if ( !(a && b) )
       {
          printf("Line 4 - 条件为真
    " );
       }
    }
    
    

       运算结果为:

    Line 1 - 条件为真
    Line 2 - 条件为真
    Line 3 - 条件不为真
    Line 4 - 条件为真
    Program ended with exit code: 0
    
    四、位运算符

        位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:

    位运算符.png

        假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示: A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~A = 1100 0011 下表显示了 C 语言支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:

       示例如下:

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
        
        unsigned int a = 60;    /* 60 = 0011 1100 */  
        unsigned int b = 13;    /* 13 = 0000 1101 */
        int c = 0;           
     
       c = a & b;       /* 12 = 0000 1100 */ 
       printf("Line 1 - c 的值是 %d
    ", c );
     
       c = a | b;       /* 61 = 0011 1101 */
       printf("Line 2 - c 的值是 %d
    ", c );
     
       c = a ^ b;       /* 49 = 0011 0001 */
       printf("Line 3 - c 的值是 %d
    ", c );
     
       c = ~a;          /*-61 = 1100 0011 */
       printf("Line 4 - c 的值是 %d
    ", c );
     
       c = a << 2;     /* 240 = 1111 0000 */
       printf("Line 5 - c 的值是 %d
    ", c );
     
       c = a >> 2;     /* 15 = 0000 1111 */
       printf("Line 6 - c 的值是 %d
    ", c );
    }
    
    

       运算结果为:

    Line 1 - c 的值是 12
    Line 2 - c 的值是 61
    Line 3 - c 的值是 49
    Line 4 - c 的值是 -61
    Line 5 - c 的值是 240
    Line 6 - c 的值是 15
    Program ended with exit code: 0
    
    五、赋值运算符
    赋值运算符.png

       示例如下:

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
        
        int a = 21;
       int c ;
     
       c =  a;
       printf("Line 1 - =  运算符实例,c 的值 = %d
    ", c );
     
       c +=  a;
       printf("Line 2 - += 运算符实例,c 的值 = %d
    ", c );
     
       c -=  a;
       printf("Line 3 - -= 运算符实例,c 的值 = %d
    ", c );
     
       c *=  a;
       printf("Line 4 - *= 运算符实例,c 的值 = %d
    ", c );
     
       c /=  a;
       printf("Line 5 - /= 运算符实例,c 的值 = %d
    ", c );
     
       c  = 200;
       c %=  a;
       printf("Line 6 - %= 运算符实例,c 的值 = %d
    ", c );
     
       c <<=  2;
       printf("Line 7 - <<= 运算符实例,c 的值 = %d
    ", c );
     
       c >>=  2;
       printf("Line 8 - >>= 运算符实例,c 的值 = %d
    ", c );
     
       c &=  2;
       printf("Line 9 - &= 运算符实例,c 的值 = %d
    ", c );
     
       c ^=  2;
       printf("Line 10 - ^= 运算符实例,c 的值 = %d
    ", c );
     
       c |=  2;
       printf("Line 11 - |= 运算符实例,c 的值 = %d
    ", c );
    }
    
    

       运算结果为:

    Line 1 - =  运算符实例,c 的值 = 21
    Line 2 - += 运算符实例,c 的值 = 42
    Line 3 - -= 运算符实例,c 的值 = 21
    Line 4 - *= 运算符实例,c 的值 = 441
    Line 5 - /= 运算符实例,c 的值 = 21
    Line 6 - %= 运算符实例,c 的值 = 11
    Line 7 - <<= 运算符实例,c 的值 = 44
    Line 8 - >>= 运算符实例,c 的值 = 11
    Line 9 - &= 运算符实例,c 的值 = 2
    Line 10 - ^= 运算符实例,c 的值 = 0
    Line 11 - |= 运算符实例,c 的值 = 2
    Program ended with exit code: 0
    
    六、杂项运算符 ↦ sizeof & 三元

    下表列出了 C 语言支持的其他一些重要的运算符,包括 sizeof 和 ? :。


       示例如下:

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
        
        int a = 4;
       short b;
       double c;
       int* ptr;
     
       /* sizeof 运算符实例 */
       printf("Line 1 - 变量 a 的大小 = %lu
    ", sizeof(a) );
       printf("Line 2 - 变量 b 的大小 = %lu
    ", sizeof(b) );
       printf("Line 3 - 变量 c 的大小 = %lu
    ", sizeof(c) );
     
       /* & 和 * 运算符实例 */
       ptr = &a;    /* 'ptr' 现在包含 'a' 的地址 */
       printf("a 的值是 %d
    ", a);
       printf("*ptr 是 %d
    ", *ptr);
     
       /* 三元运算符实例 */
       a = 10;
       b = (a == 1) ? 20: 30;
       printf( "b 的值是 %d
    ", b );
     
       b = (a == 10) ? 20: 30;
       printf( "b 的值是 %d
    ", b );
    }
    
    

       运算结果为:

    Line 1 - 变量 a 的大小 = 4
    Line 2 - 变量 b 的大小 = 2
    Line 3 - 变量 c 的大小 = 8
    a 的值是 4
    *ptr 是 4
    b 的值是 30
    b 的值是 20
    Program ended with exit code: 0
    
    七、C语言中的运算符优先级

        运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。
    例如 x = 7 + 3 * 2,在这里,x 被赋值为 13,而不是 20,因为运算符 * 具有比 + 更高的优先级,所以首先计算乘法 3*2,然后再加上 7。
    下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。


       示例如下:

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
        
        int a = 20;
       int b = 10;
       int c = 15;
       int d = 5;
       int e;
     
       e = (a + b) * c / d;      // ( 30 * 15 ) / 5
       printf("(a + b) * c / d 的值是 %d
    ",  e );
     
       e = ((a + b) * c) / d;    // (30 * 15 ) / 5
       printf("((a + b) * c) / d 的值是 %d
    " ,  e );
     
       e = (a + b) * (c / d);   // (30) * (15/5)
       printf("(a + b) * (c / d) 的值是 %d
    ",  e );
     
       e = a + (b * c) / d;     //  20 + (150/5)
       printf("a + (b * c) / d 的值是 %d
    " ,  e );
      
       return 0;
    }
    
    

       运算结果为:

    (a + b) * c / d 的值是 90
    ((a + b) * c) / d 的值是 90
    (a + b) * (c / d) 的值是 90
    a + (b * c) / d 的值是 50
    Program ended with exit code: 0
    
    回首过往,记录点滴
  • 相关阅读:
    BZOJ 2212/BZOJ 3702
    BZOJ 4761 Cow Navigation
    BZOJ 3209 花神的数论题
    BZOJ 4760 Hoof, Paper, Scissors
    BZOJ 3620 似乎在梦中见过的样子
    BZOJ 3940 Censoring
    BZOJ 3942 Censoring
    BZOJ 3571 画框
    BZOJ 1937 最小生成树
    BZOJ 1058 报表统计
  • 原文地址:https://www.cnblogs.com/hwangcheng/p/8524625.html
Copyright © 2011-2022 走看看