学习C的好日子--好多的运算符

    • 赋值运算符

1.1-解释+区别

基本的赋值运算符是“=”。他的优先级别低于其他运算符,所以对该运算符往往最后读取。

(区别:赋值“=” 和数学上的‘=’是不一样的 ;而与数学一样意义的符号在c中的体现是“==”(这个才是等于))

赋值将某一数值赋给某个变量的过程,称为赋值。

int a;
a=12;

更多的
+= 加赋值
-= 减赋值
*= 乘赋值
/= 除赋值
%= 求余赋值
&= 按位与赋值
| = 按位或赋值
^= 按位异或赋值
<<= 左移位赋值
>>= 右移位赋值

来源:可以参考赋值运算符_百度百科 (baidu.com)


1.2-代码

#include <stdio.h>
 
int main()
{
   int a = 7;
   int c ;
 
   c =  a;
   printf(" - =  运算符,c 的值 = %d\n", c );
 
   c +=  a;
   printf("+= 运算符,c 的值 = %d\n", c );
 
   c -=  a;
   printf(" -= 运算符,c 的值 = %d\n", c );
 
   c *=  a;
   printf(" *= 运算符,c 的值 = %d\n", c );
 
   c /=  a;
   printf(" /= 运算符,c 的值 = %d\n", c );
 
   c  = 20;
   c %=  a;
   printf(" %%= 运算符,c 的值 = %d\n", c );
 
   c <<=  2;
   printf("<<= 运算符,c 的值 = %d\n", c );
 
   c >>=  2;
   printf(”>>= 运算符,c 的值 = %d\n", c );
 
   c &=  2;
   printf(“”&= 运算符,c 的值 = %d\n", c );
 
   c ^=  2;
   printf(" ^= 运算符,c 的值 = %d\n", c );
 
   c |=  2;
   printf("|= 运算符,c 的值 = %d\n", c );
 }


    • 算术运算符

2.1-解释

算术运算符:即 算术 运算符号。
算术 运算 (arithmetic operators) 符号:就是用来处理 四则运算 的符号

2.2-例如

关注模运算‘%’

// 尤其是 (1)(3)就可以知道无论3是正数还是负数都不会影响

只要(1)(2)或者(2)(3)的对比 只有10的正负发生了变化才会影响结果;

所以当我们写的明知道是负数的时候,这除数的符号要不然就提取出来,要不然就像(4)一样

#include <stdio.h>
int main(){
    printf("%d\n",10%3);//1
    printf("%d\n",-10%3);//-1
    printf("%d\n",10%-3);//1
    printf("%d\n",-10%-3);//-1
}

自增、自减运算符

它的作用是在运算结束前(前置自增自减运算符)或后(后置自增自减运算符)将变量的值加(或减)一。

#include <stdio.h>
 
int main()
{
   int c;//用c来论证a的变换
   int a = 10;
   c = a++; 
   printf("Line 1 - c 的值是 %d\n", c );
   printf("Line 2 - a 的值是 %d\n", a );
   a = 10;
   c = a--; 
   printf("Line 3 - c 的值是 %d\n", c );
   printf("Line 4 - a 的值是 %d\n", a );
 
   a = 10;
   c = ++a; 
   printf("Line 5 - c 的值是 %d\n", c );
   printf("Line 6 - a 的值是 %d\n", a );
   a = 10;
   c = --a; 
   printf("Line 7 - c 的值是 %d\n", c );
   printf("Line 8 - a 的值是 %d\n", a );
 

}
我们换需要注意的是下面的情况千万别写成a+++j 这样容易出歧义 最好加上括号
int i=7;
int j=5;
int a = i++;
int b = a+(++j);
printf("%d, %d\n", a, b);

2.3-举例子

#include <stdio.h>
int main(){
    int a=7,b=4;
    float c;
    printf("%d\n",a+b);
    printf("%d\n",a-b);
    printf("%d\n",a/b);
    printf("%d\n",a%b);
    //求模运算  只取决于左边的数字
    printf("%d\n",-a%b);
    printf("%d\n",a++);
    printf("%d\n",a);
    printf("%d\n",++a);
    c=(a+b);
    printf("%f",c);
}



    • 关系运算符

3.1-解释

关系运算符,有6种关系,分别为小于、大于、小于等于、大于等于、等于、不等于。

在c中的体现是“==”(这个才是等于

3.2结果值

关系运算符的值只能是0或1。
关系运算符的值为真时,结果值都为1。
关系运算符的值为假时,结果值都为0。
#include<stdio.h>
int main(){
    int a=12,b=11;
    printf("%d\n",a>b);//1
    printf("%d",a<b);//0
}

我们换需要注意的是<= or>=那个前 那个后一定是确定的 不能乱来。

3.3-注意事项

(1)前4种关系运算符的优先级别相同,后两种也相同。前四种高于后两种。

(2)关系运算符的优先级低于算术运算符

(3)关系运算符的优先级高于赋值运算符


    • 逻辑运算符

4.1-代码

/*
&&是且关系1&&1  是            对
||     是或者关系仅仅0&&0是     错
*/
#include<stdio.h>
int main(){
    int a,b;
    scanf("%d%d",&a,&b);
    if((a>1)&&(b<18))
    {
        printf("ok");
    }
    else{
        printf("no");
    }
}

4.2-注意

用&&的时候我们可以表示应该区间的范围

但是千万不能写成1<=x<=10这种是有歧义的,计算机是一步接着一步的,我们先判断x是不是在1《=x这个里面的在和右面的,这样容易(是容易出问题)

    • 强制转换/逗号

这个没多少讲的了

逗号运算符取最右边的 参考(32条消息) 逗号运算符与表达式-运算符与表达式-CSDNC技能树

5.1-举例

#include <stdio.h>
int main(){
    //05强制转换
    double d=3.14;
    int a=(int)d;
    //不改变d   这个浮点值
    //%.nf  表示保留n为小数
    //%n。f       有2个位置且不留小数
    printf("%.2f\n%d\n",d,a);
    
    //06逗号运算符
    //取得()中最  右边的数字
    int c=(2,3,4,5,1);
    printf("%d\n",c);
    return 0;
}

5.2-强制类型转换(隐式自动类型转换)

操作数的类型不同,而且不属于基本数据类型时,经常需要将操作数转化为所需要的类型,这个过程即为强制类型转换。强制类型转换具有两种形式:显式强制转换和隐式强制类型转换。

举个例子,求素数的这个需要用到《math.h》

#include <stdio.h>
#include <math.h>
int main(){
    //i=a*b    那么a和b里至少有一个数字<=开平方i
    //sqrt--开平方的数学库函数
    int i=0,count=0;
    for(i=101;i<=200;i+=2){
        int j=0;
        for(j=2;j<=(int)sqrt(i);j++){
            if(i%j==0){
                break;
            }
        }
        if(j>sqrt(i)){
            count++;
            printf("%d\n",i);
        }
    }
    printf("%d个·",count);    
}

那么就需要介绍一下sqrt了

SQRT

函数原型

doublesqrt(doublex);

参数

  • x -- 浮点值。

返回值

该函数返回 x 的平方根。

    • 位运算符

6.1-用法

6.2-注意

'^'在计算机里并不是数学中的幂次 是异或

这个最好的方式就是知道1~10里少一个数的这种问题

解决:1~10遍历^在和缺失数的1~10整体异或

左移、右移是方便二进制

左移可以方便计算:方便2倍

右移方便知道 数x的二进制的1 与0 的个数(需要while一下)

6.3-看例子

    • 三目运算符

7.1-闰年求解

#include <stdio.h>
int main(){
    int year;
    for(year=1000;year<=2000;year++){
        //能被4整除并且不能被100整除
        //能被400整除的是闰年
        if(year%4==0&&year%100==0){
            printf("%d",year);
        }else if(year%400==0){
            printf("%d",year);
        }
    }
}

7.2-三目运算符(本质上是if…else)

#include<stdio.h>
int main(){
    int year;
    scanf("%d",&year);
    //是真的返回1
    //不是    返回0
    year=(year%100==0)?(year%400==0?1:0):(year%4==0?1:0);
    printf("%d",year);
    if(year){
        printf("是闰年");
    }
    else if(!year){
        printf("不是闰年");
    }
}
  1. &和*

用于指针

 int* ptr;
printf("%p",&a);

可以看我的https://blog.csdn.net/m0_74154295/article/details/128746052里面写了指针的数据类型占的大小4/8字节

    • 优先级

参考技能树(32条消息) 运算符优先级与求值顺序-运算符与表达式-CSDNC技能树

菜鸟教程的实例

#include <stdio.h>
 
main()
{
   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\n",  e );
 
   e = ((a + b) * c) / d;    // (30 * 15 ) / 5
   printf("((a + b) * c) / d 的值是 %d\n" ,  e );
 
   e = (a + b) * (c / d);   // (30) * (15/5)
   printf("(a + b) * (c / d) 的值是 %d\n",  e );
 
   e = a + (b * c) / d;     //  20 + (150/5)
   printf("a + (b * c) / d 的值是 %d\n" ,  e );
  
   return 0;
}
(a + b) * c / d 的值是 90
((a + b) * c) / d 的值是 90
(a + b) * (c / d) 的值是 90
a + (b * c) / d 的值是 50
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你会魔法吗✧(≖ ◡ ≖✿)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值