C语言·运算符相关

1、先乘除或取余取模(%),再加减。

        其中取余运算符%要求操作数都是整数,如果有非整数,程序会编译不通过。

        当运算符/和%的操作数用于负数操作时,结果很难确定。

        除法的结果总是向0截取,结果会选择趋向于0的结果。

2、在关系运算符(大于小于等于…)中,C语言认为一切非零值都为真。5 < 3为假,5 > 3为真,5 为真。当以%d的形式输出时,假为0,真为1。

3、 3 < a < 10是错误的,只要此时 a >3,即认为该运算式为真,不会再运行后面的a<10.即此时a = 19,也会认为 真,因为 a > 3。

4、逻辑运算符:!(原来为真,!后则为假),&&,||为逻辑与、逻辑或、逻辑非。

     ||和|有区别,&和&&有区别

        &时,左边无论真假,右边都进行运算; 

        &&时,如果左边为真,右边参与运算,如果左边为假,则右边不参与运算

        “|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。

5、条件运算符:        C语言中唯一一种三目运算符,a > b ?a:b

6、自增自减:注意前增增和后增增的区别。

#include <stdio.h>
//熟悉运算符优先级

int main() 
{ 
    int a = 4 + 5 * 2 - 6 / 3 + 10 % 2;
    int b = 4 + 5 * 2 - 6 / 3 + 11 % 4;
    printf("%d,%d,%c\n", a, b, a+48);
    printf("%d,%d\n",5 < 3, 5 > 3);
    
    
    int i = 1,j = 1;
    printf("%d,%d\n",i++,++j);//后增i,前增j
    printf("%d,%d\n",i, j);

    return 0; 
}  
/**输出结果:
12,15,<
0,1
1,2
2,2

*/

4 + 10 - 2 + 0 = 12

4 + 10 -2 + 3 = 15

12 + 48 是 60,在ASCII码中对应的是<


练习

1、取余和除法:

#include <stdio.h>
//练习;输入1234,输出4321

int main() 
{ 
    int a,b;
    scanf("%d",&a);
    while(a != 0){
       b = a % 10;
       a = (a - b) / 10;
       printf("%d",b);
    }
    printf("\n");
    return 0; 
}  
/**
    输入:1234
    输出:4321
*/

b = 1234 % 10 = 4          a = 1230 /10 = 123

b = 123 %10 = 3              a = 12

b = 2                                 a = 1

b = 1                                  a = 0

当 a = 0时,跳出循环

#include <stdio.h>
#include<stdlib.h>
//取余和除法

int main() 
{ 
    printf("%d, %d\n",8/5,8%5);
    printf("%d, %d\n",-8/5,-8%5);
    printf("%d, %d\n",8/-5,8%-5);   //???为什么 8%-5 是3
    printf("%d, %d\n",-8/-5,-8%-5); //???为什么 -8%-5 是 -3
    return 0; 

}  
/**
    输出结果:
    1, 3
    -1, -3
    -1, 3
    1, -3

*/

我不李姐

2.判断浮点数相等

#include <stdio.h>
//判断两个浮点数是否相等

int main() 
{ 
    float f = 123.45;
    //错误判断方法
    if( f == 123.45){
        printf(" f is equal to 123.45\n");
    }
    else{
        printf("f  is  not equal to 123.45\n");
    }

    //正确判断方法
    if(f - 123.45 > -0.0001 && f - 123.45 < 0.0001){
        printf(" f is equal to 123.45\n");
    }
    else{
        printf("f  is  not equal to 123.45\n");
    }

    return 0; 
}
//输出结果:
f  is  not equal to 123.45
f  is  equal to 123.45

3.判断闰年

/**
 * @file text.c
 * @author ashore (you@domain.com)
 * @brief 
 * @version 0.1
 * @date 2022-06-20
 * 
 * @copyright Copyright (c) 2022
 * 闰年:可以被4整除的,或者是可以被400(
 *      不可以被400整除但可以被4整除的整百年不是闰年
 * )
 */
#include <stdio.h>
#include<stdlib.h>
//判断闰年

int main() 
{ 
    int i = 0;
    while (scanf("%d",&i) != EOF)
    {
        if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0){
            printf("第%d年是闰年\n",i);
        }
        else{
            printf("第%d年不是闰年\n",i);
        }
    }
    

    return 0; 
}  

//输入:2100,输出第2100年不是闰年

4、自增和自减

 int i =1, j =1, k = 1;
 i += j += k;
 printf("%d,%d,%d\n",i ,j ,k);
/**
    输出结果:3,2,1
    我以为的输出结果:4,3,2
*/
int i = 1;
printf("%d\n", i++ - 1);
printf("%d\n",i);
/**
    输出结果:
    0
    2
    -1只是一个计算,并不会影响i值。i = i + 1 = 2
*/

5.其它需要注意的

1级优先级 左结合       () ,[ ],-> .

2级优先级 右结合         !  ~   ++   --   +   -  *  &   sizeof 长度运算符 

3级优先级 左结合   *  /  %  

4级优先级 左结合        + - 

5级优先级 左结合         <<>> 

6级优先级 左结合         <、<=、>、>= 

7级优先级 左结合         ==    !=  

8级优先级 左结合         

9级优先级 左结合         ^ 按位异或运算符 

10级优先级左结合         

11级优先级 左结合         && 

12级优先级 左结合         || 

13级优先级 右结合         ? :

14级优先级 右结合         = += -= *= /= %= &= ^= |= <<= >>= 全为赋值运算符

int i = 2,j = 3, k;
k = i * j == 6;
printf("%d\n",k);
//输出结果为 1 (i*j == 6为真)

int i = 3,j = 4, k = 5;
printf("%d\n",i % j + i <k);
/**
    输出结果为 0 ((( i % j) + i) < k)

*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wmpreturn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值