成长之路---C语言笔记(运算符与表达式)

简介: 成长之路---C语言笔记(运算符与表达式)

少年读书,如隙中窥月;中年读书,如庭中望月;老年读书,如台上玩月。皆以阅历之深浅,为所得之深浅耳——张潮


C语言运算符


运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。


一.算数运算符


数学中常见的加减乘除在C语言中同样存在:“+",“-”,"*" ,"/"。


注:其中值得注意的是在C语言中如果两个整型相除得到的结果仍为整型(整数)而非浮点型(小数)。


其他的算数运算符还有


1.取模运算符("%"):结果为整除后的余数


2.自增运算符 ("++") : 结果为整数值增加 1


3.自减运算符 ("--") :结果为整数值减少1


注:自增/自减运算符的放置位置也会影响运算结果


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


c39099927cac31b96e85c814a97a6ddc_bfb1d4b16107cb50db7a747c36edaceb.png


以下是算数运算符的运用
#include<stdio.h>
int main()
{
    int a, b,c,d;
    a = 8;b = 2;
    c = a + b;
    printf("%d\n", c);
    c = a - b;
    printf("%d\n", c);
    c = a * b;
    printf("%d\n", c);
    c = a / b;
    printf("%d\n", c);
    c = a % b;
    printf("%d\n", c);
    c = a++;
    printf("%d\n", c);
    c = --b;
    printf("%d\n", c);
    return 0;
}


668b304ef896a2f8f008923502277947_d3f49b72009d45e471e9f1bbeb05e4fc.png


二.关系运算符


在C语言中0为假,一切的非0为真


如同数学中常见的大于小于一般,C语言中同样拥有


小于(">") 大于(“<”) 大于等于(“>=”) 小于等于(“<=”)


其中若运算成立结果即为真反之诺不成立结果即为假


另外的关系运算符还有


1.等于("=="):检查两个操作数的值是否相等,如果相等则条件为真。(与数学中的等于”=“略有不同,在c语言中”=“为赋值运算符有不同的用法)


2.不等于 ("!="):检查两个操作数的值是否相等,如果不相等则条件为真。(与等于相反真为假,假为真)


以下是关系运算符的运用


int main()
{
    int a = 21;
    int b = 10;
    int c;
    if (a == b)
    {
        printf("Line 1 - a 等于 b\n");
    }
    else
    {
        printf("Line 1 - a 不等于 b\n");
    }
    if (a < b)
    {
        printf("Line 2 - a 小于 b\n");
    }
    else
    {
        printf("Line 2 - a 不小于 b\n");
    }
    if (a > b)
    {
        printf("Line 3 - a 大于 b\n");
    }
    else
    {
        printf("Line 3 - a 不大于 b\n");
    }
    /* 改变 a 和 b 的值 */
    a = 5;
    b = 20;
    if (a <= b)
    {
        printf("Line 4 - a 小于或等于 b\n");
    }
    if (b >= a)
    {
        printf("Line 5 - b 大于或等于 a\n");
    }
}



三.逻辑运算符与位运算符


这两种运算符在C语言的使用中算是较难,易弄混的点,于是我就些在一起了


逻辑运算符


1.逻辑与运算符(“&&”):如果两个操作数都非零,则条件为真。


2.逻辑或运算符(“ ||“ ) : 如果两个操作数中有任意一个非零,则条件为真。


3.逻辑非运算符(“ !”) :用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。


位运算符


1.按位与操作符(“&”):假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:


2.按位或运算符( "|" ) :A = 0011 1100 B = 0000 1101


3.异或运算符 ( "^" ) : A&B = 0000 1100 A|B = 0011 1101


4.取反运算符 ( "~" ) : A|B = 0011 1101 A^B = 0011 000


5.二进制左移运算符( "<<" ):


6.二进制右移运算符(">>" ):


注:若运算值为负数需考虑原码,反码,补码的转换


以下是逻辑运算符及位运算符的运用


#include <stdio.h>
int main()
{
   int a = 5;
   int b = 20;
   int c ;
   if ( a && b )
   {
      printf("Line 1 - 条件为真\n" );
   }
   if ( a || b )
   {
      printf("Line 2 - 条件为真\n" );
   }
   /* 改变 a 和 b 的值 */
   a = 0;
   b = 10;
   if ( a && b )
   {
      printf("Line 3 - 条件为真\n" );
   }
   else
   {
      printf("Line 3 - 条件为假\n" );
   }
   if ( !(a && b) )
   {
      printf("Line 4 - 条件为真\n" );
   }
}


cfbc4da564870b08480e42ea30054f21_9f5337f638836ebfa200e9aac13dd6a4.png


#include <stdio.h>
int main()
{
   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\n", c );
   c = a | b;       /* 61 = 0011 1101 */
   printf("Line 2 - c 的值是 %d\n", c );
   c = a ^ b;       /* 49 = 0011 0001 */
   printf("Line 3 - c 的值是 %d\n", c );
   c = ~a;          /*-61 = 1100 0011 */
   printf("Line 4 - c 的值是 %d\n", c );
   c = a << 2;     /* 240 = 1111 0000 */
   printf("Line 5 - c 的值是 %d\n", c );
   c = a >> 2;     /* 15 = 0000 1111 */
   printf("Line 6 - c 的值是 %d\n", c );
}


8f647daa4bf5539720232433f0cfbca3_37fb19be54c7c1c602d80403c694aeaf.png


四.赋值运算符


C 语言共提供了 11 个赋值运算符,均为二元运算符,其中仅有一个为基本赋值运算符 =,其余 10 个均是复合赋值运算符。


1.简单的赋值运算符(" = ") :右边操作数的值赋给左边操作数。


2.加且赋值运算符 ("+="):把右边操作数加上左边操作数的结果赋值给左边操作数。


3减且赋值运算符 ("-+" ) :把左边操作数减去右边操作数的结果赋值给左边操作数。


4.乘且赋值运算符 ("*=" ) :把右边操作数乘以左边操作数的结果赋值给左边操作数。


5.除且赋值运算符 ("/=" ) :把左边操作数除以右边操作数的结果赋值给左边操作数。


6.求模且赋值运算符("%=" ) 求两个操作数的模赋值给左边操作数。


7.左移且赋值运算符("<<=" )


8.右移且赋值运算符(">>=" )


9.按位与且赋值运算符("&=" )


10.按位异或且赋值运算符("^=" )


11.按位或且赋值运算符("|=" )


以下是赋值运算符的运用


#include <stdio.h>
int main()
{
   int a = 21;
   int c ;
   c =  a;
   printf("Line 1 - =  运算符实例,c 的值 = %d\n", c );
   c +=  a;
   printf("Line 2 - += 运算符实例,c 的值 = %d\n", c );
   c -=  a;
   printf("Line 3 - -= 运算符实例,c 的值 = %d\n", c );
   c *=  a;
   printf("Line 4 - *= 运算符实例,c 的值 = %d\n", c );
   c /=  a;
   printf("Line 5 - /= 运算符实例,c 的值 = %d\n", c );
   c  = 200;
   c %=  a;
   printf("Line 6 - %%= 运算符实例,c 的值 = %d\n", c );
   c <<=  2;
   printf("Line 7 - <<= 运算符实例,c 的值 = %d\n", c );
   c >>=  2;
   printf("Line 8 - >>= 运算符实例,c 的值 = %d\n", c );
   c &=  2;
   printf("Line 9 - &= 运算符实例,c 的值 = %d\n", c );
   c ^=  2;
   printf("Line 10 - ^= 运算符实例,c 的值 = %d\n", c );
   c |=  2;
   printf("Line 11 - |= 运算符实例,c 的值 = %d\n", c );
}


21d2cdead115c4c78a8ad7409a1fa190_779c4e3fc15373246228c0494013d566.png


五.三目运算符(“?:”)


三目运算符,又称条件运算符,是计算机语言(c,c++,java等)的重要组成部分。它是唯一有3个操作数的运算符,有时又称为三元运算符。一般来说,三目运算符的结合性是右结合的。


常见用法如: if(a>b) max=a;else max=b;可用条件表达式写为 max=(a>b) ? a : b;


六.sizeof()


返回变量的大小,并非函数而是运算符与strlen()常被弄混


常见的使用形式为sizeof(变量名)


注:变量名可不被括号括住如sizeof a,不可用sizeof(void)


七.逗号运算符


一条语句理论上是有返回值的,如果语句里面有多个逗号,则以最后一个逗号后面的表达式值为返回值

目录
相关文章
|
4天前
|
C语言
C语言中的关系运算符和关系表达式
C语言中的关系运算符和关系表达式
11 0
|
4天前
|
C语言
C语言中的条件运算符和条件表达式详解
C语言中的条件运算符和条件表达式详解
13 0
|
12天前
|
C语言
c语言表达式求值--整型提升
c语言表达式求值--整型提升
|
4天前
|
C语言
C语言中的运算符和表达式
C语言中的运算符和表达式
12 0
|
4天前
|
C语言
C语言中的逻辑运算符和逻辑表达式
C语言中的逻辑运算符和逻辑表达式
10 0
|
4天前
|
IDE 测试技术 开发工具
|
5天前
|
编译器 数据处理 C语言
C语言运算符的深入探究
C语言运算符的深入探究
11 0
|
5天前
|
存储 安全 C语言
C语言强制类型转换运算符
C语言强制类型转换运算符
12 0
|
8天前
|
存储 编译器 程序员
C语言中的表达式:深入理解与应用
C语言中的表达式:深入理解与应用
|
8天前
|
程序员 编译器 C语言
C语言运算符深入解析
C语言运算符深入解析