初识c语言3——9.算数操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式。

(1)算数运算符

+ - * /(%)

加、减、乘和数学运算一样,在除这方面就有所不同,(/)运算符在进行运算时取的是运算之后的整数,而(%)运算符在进行运算时取的是运算之后的余数

Eg:

题目:将一个n位数,反向输出

#include <stdio.h>

int main()

{

        int r=0;

        scanf("%d",&r);        

        while(r)        //当r为0时,循环结束

        {

                printf("%d",n%10);        /*进行%10取余的方法依次打印末尾的单个数值,注意进行运算时,n本身的值未发生改变        */

                n=n/10;                //将n进行/10取整赋给n,使n下一次能够打印所需值

        }

        return 0;

}

(2)移位操作符

右移运算符>>        左移运算符<<

在二进制的基础上进行对数字进行平移

Eg:

3的二进制数为:00000011

3>>1        //把3的二进制位向右移动一位,右边最低位舍去,左边最高位补0,得到00000001

3<<1        //把3的二进制位向左移动一位,左边最高位舍去,右边最高位补0,得到00000110

Eg:

#include <sttdio.h>

int main()

{

        int r=3;

        int n=0;

        int n=r>>1;                //n=1

        int n=r<<1;                 /*位运算符不会改变原变量的值,要改变原变量的值需要进行赋值表达式实现,所以n=6

        printf("%d',n);                //打印6

        return 0;

}

(3)位操作符

按位与(&)、按位或(|)、按位异或(^)

功能:对两个二进制数进行运算

&:对应的两个二进制位都为1则取1,其他可能都取0

|:对应的两个二进制位都为0则取0,其他可能都取1

^:对应的两个二进制位相同则取0,其他可能都取1

#include <stdio.h>

int main()

{

        int r=3;                                   //        r:00000011

        int n=2;                                 //        n:00000010

        int w=0;

        w=r&n;

        printf("%d",w);                    //        w:00000010=2

        w=r|n;                                //        w:00000011=3

        printf("%d",w);

        w=r^n;                              //        w:00000001=1

        printf("%d",w);

        return 0;

}

(4)赋值操作符

=        +=        -=        *=        /=        &=        ^=        |=        >>=        <<=

功能:右侧进行运算赋给左值

x+=y等价于x=x+y,其他赋值操作符相同道理

Eg:

#include <stdio.h>

int main()

{

        int r=2;

        int w=3;

        w=r;                //w=2

        printf("%d",w);

        w+=r;                //w=4

        printf("%d",w);

        return 0;

}

(5)单目操作符

       !                逻辑反操作符

       -                负值

       +                正值

       &                取地址

       sizeof        计算数据类型所占字节数

       ~                对一个数的二进制数按位取反

       --                前置、后置--

       ++              前置、后置++

       *                间接访问操作符(解引用操作符)

    (类型)        强制类型转换

1.Eg:(!)        n为整数,当n=0时,!(n)=1,当n不等于0时,!(n)=0

#include <stdio.h>

int main()

{

        int r=0;

        int n=1;

        if(!r)               // 本来r不为0,条件才为真,加上逻辑反操作符后,r为0,条件才为真

        {

                printf("linqinyan");                //所以条件成立,打印linqinyan

        }

        if(!n)                //条件为假,跳过此语句

        {

                printf("lqy");

        }

        return 0;

2.Eg:(-)(+)(~)

        有符号数(符号位不变)

        正数:源码、反码、补码相同(二进制最高位为0)

        负数:源码、反码、补码不同,要进行计算(二进制最高位为1)

        无符号数:源码、反码、补码相同

        有符号数(正数)无符号数:以源码的形式进行存储(二进制)

        1                00000001        源码

                          00000001        反码

                          00000001        补码

        有符号数(负数)的存储方式:以补码的形式进行存储(二进制)

        -1                10000001        源码

                            11111110        反码

                            11111111        补码

        a=0                00000000(二进制数)

        ~a                  11111111(二进制数)    

3.Eg:(&)(*)

                 &后面为一个量,每一个量都对应一块属于自己的存储空间,每一个存储空间都有一个属于自己的编号,这个编号称为地址,因为指针指向的是一个地址,所以可以称指针为地址。

                一级指针一般表示形式表示为int* q,指的是int*类型的变量q,  二级指针一般形式表示为  int** q,指的是int**类型的变量q,以此类推,若q为一个int类型的指针变量,对q进行解引用操作,可以表达为*q

                解引用操作:*q为一个量的地址,进行解引用就是把地址里的值取出来

Eg:

#include <stdio.h>

int main()

{

        int r=10;

        int* q=&r;                //类型需相同才能赋值,传过去的为一个地址(编号)

        *q=20;

        printf("%d",r);        //通过指针q找到了r的地址,进行 解引用操作(*)更改了r里的值        打印20

        return 0;

}

4.Eg:(sizeof)        (类型)

sizeof():计算数据类型所占字节数,()里只能存放一种数据类型,若想计算多个数据类型,可使用多个sizeof()。

#include <stdio.h>

int main()

{

        int r=0;

        float n=1;

        n=(float)r;                //类型不相同,进行强制类型转换

        printf("%d",sizeof(int));        //4

        printf("%d',sizeof(n));        //n为float类型,打印4

        return 0;

}

5.Eg:(--)(++)

i--        先使用,后自减-1

i++        先使用,后自增+1

--i        先自减-1,后使用

++i        先自增+1,后使用

#include <stdio.h>

int main()

{

        int r=0;

        int w=1;

        int n=2;

        r=(w++)+(--n);        //r=1+(2-1)

        printf("%d",w);        //2

        printf("%d',n);        //1

        printf("%d",r);        //2

        return 0;

}

(6)关系运算符

>                  大于号

>=                大于等于号

<                  小于号

<=                小于等于号

!=                 用于测试“不相等”

==                用于测试”相等“

注释:条件为真则为1,条件为假则为0

Eg:题目比较输入两个数的大小关系

#include <stdio.h>

int main()

{

        int r=0;

        int n=0;

        while(scanf("%d %d,&r,&n)==2)        //scanf的返回值为输入数据的个数,条件成立则为真

        {

                if(r==n)

                {

                        printf("%d=%dn",r,n);

                }

                else if(r>n)

                {

                        printf("%d>%dn",r,n);

                }

                else

                {

                        printf("%d<%dn",r,n);

                }

        return 0;

}

(7)逻辑运算符

        &&                逻辑与        条件都满足则为真,有一个为假则为假

        ||                  逻辑或        条件有一个满足则为真,两个为假则为假

Eg:判断一个整数M是否能被5整除且能被3整除(要求:1<=M<=100)

#include <stdio.h>

int main()

{

        int M=0;

        scanf("%d”,&M);

        if(1<=M<=100)

        {

                if(M%5==0&&M%3==0)         

                {

                        printf("YES");

                }

                else

                {

                        printf("NO"); 

               }

        }

        return o;

}

(8)条件操作符

        exp1?x:y        //首先判断exp1是否成立,若exp1为真则返回x,若exp1为假则返回y

Eg:

#include <stdio.h>

int main()

{

        int r=1;

        int n=2;

        printf("%d",n<r?r,n);

        return 0;

}

(9)逗号表达式

exp1,exp2,exp3....expn                //赋值时取最后一个表达式的值

Eg;

#include <stdio.h>

int main()

{

        int r=0;

        int n=1;

        int i=2;

        r=(n++),(--i),(n+i);        //r=1,1,3

        printf("%d",r);             //r=3

        return 0;

}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>