C语言:运算符和判断

C语言提供了以下运算法

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

算术运算符

+、减 -、乘 *、除 /、求余 % 、自加 ++、自减 --

# include <stdio.h>

int main() {
    int a = 4;  // 声明定义和初始化
    int b = 2;  // 声明定义和初始化
    int c;      // 声明定义

    c = a + b;  // 加 6
    c = a - b;  // 减 2
    c = a * b;  // 乘 8
    c = a / b;  // 除 2
    c = a % b;  // 求余 0
}

a++  先赋值再自加

++a 先自加再赋值

# include <stdio.h>

int main() {
    int c;      // 声明定义
    int a = 4;  // 声明定义和初始化

    c = a++;  // 自加
    printf("先赋值再运算");
    printf("%d\n", c);  // 4
    printf("%d\n", a);  // 5

    a = 4;  // 声明定义和初始化
    c = a--;  // 自减
    printf("%d\n", c);  // 4
    printf("%d\n", a);  // 3

    printf("先运算再赋值");
    a = 4;  // 声明定义和初始化
    c = ++a;  // 自加
    printf("%d\n", c);  // 5
    printf("%d\n", a);  // 5

    a = 4;  // 声明定义和初始化
    c = --a;  // 自减
    printf("%d\n", c);  // 3
    printf("%d\n", a);  // 3
}

关系运算符

判断相等 ==、判断不等 !=、大于 >、小于<、大于等于 >=、小于等于 <=

注意:C语言中没有这种级联写法 a<b<c ,正确的写法应为 a<b && b<c 

逻辑运算符

  • 与 &&:同真为真
  • 或 || :有一个真,为真
  • 非 !:转换,真变假,假变真

位运算符

位运算符作用于位,并逐位执行操作。

  • 按位与  &
  • 按位或  |
  • 按位异或  ^
  • 取反 ~
  • 二进制左移运算符 <<
  • 二进制右移运算符 >>

C语言中移位运算比乘除法效率更高,右移是除法,左移是乘法,

  • 移1位=$2^1=2$
  • 移2位=$2^2=4$
  • 移3位=$2^3=8$
  • 移4位=$2^4=16$
a = a << 3;     // a=a*8; 
b = b >> 3;     // ab=b/8; 
a = a * 9;    // 分析a*9可以拆分成a*(8+1)即a*8+a*1, 因此可以改为: a=(a<<3)+a 
a = a * 7;    //分析a*7可以拆分成a*(8-1)即a*8-a*1, 因此可以改为: a=(a<<3)-a

注意:

只有整型数据才能用移位替代乘除法,如:char、short、int、long、unsigned char、unsigned short、unsigned int、unsigned long。(double、float、bool、long double则不可以进行移位操作)

有符号数据类型移位需要注意符号位:

  • 对负数进行左移:符号位始终为1,其他位左移。
  • 对正数进行左移:所有位左移,即 <<,如果超出int能表达的返回可能会变成负数。
  • 对正数进行右移:所有位右移,即 >>

赋值运算符

简单赋值 = ;a=10

+=、-=、*=、/=、%=等等,a+=1等于a=a+1

其他运算符

sizeof() 返回变量的大小 sizeof(a) 将返回 4,其中 a 是整数
& 返回变量的地址 &a; 将给出变量的实际地址
* 指向一个变量 *a; 将指向一个变量
? : 条件表达式 如果条件为真 ? 则值为 X : 否则值为 Y

判断语句

if 语句

if(布尔值为真) {
   /* 如果布尔表达式为真将执行的语句 */
}

if ... else 语句

if(布尔值为真) {
   /* 如果布尔表达式为真将执行的语句 */
}
else {
   /* 如果布尔表达式为假将执行的语句 */
}

if...else if...else 语句

if(boolean_expression 1) {
   /* 当布尔表达式 1 为真时执行 */
}
else if( boolean_expression 2) {
   /* 当布尔表达式 2 为真时执行 */
}
else if( boolean_expression 3) {
   /* 当布尔表达式 3 为真时执行 */
}
else  {
   /* 当上面条件都不为真时执行 */
}

switch 语句

#include <stdio.h>

int main ()
{
    /* 局部变量定义 */
    char grade = 'B';

    switch(grade)
    {
        case 'A' :
            printf("成绩为A \n" );
            break;
        case 'B' :
            printf("成绩为B \n" );
            break;
        case 'C' :
            printf("成绩为C \n" );
            break;
        case 'D' :
            printf("成绩为D \n" );
            break;
        case 'F' :
            printf("成绩为E \n" );
            break;
        default :
            printf("不及格 \n" );
    }

    return 0;
}

 

posted @ 2021-05-08 21:26  凌逆战  阅读(468)  评论(0)    收藏  举报