C语言操作符整理集合

C语言操作符

操作符分类:

⑴算数操作符                   ( +  -  *  /  % )

⑵移位操作符                       (<<  >>)

⑶位操作符                         (&  |  ^)

⑷赋值操作符                         (=)

⑸复合赋值符         (+= -=  *=  /= %=  >>=  <<= &=  |=  ^=)

⑹单目运算符           (! -  +  & sizeof  ~  -- ++  *  (类型),)

⑺关系操作符          (>  >=  < <=  !=  ==)

⑻逻辑操作符                        (&&  ||)

⑼条件操作符                   (exp1?exp2:exp3)

⑽逗号表达式               (exp1,exp2,exp3,…….expN)

⑾结构成员运算符                   (.   –> )

一.算数操作符

+    -    *   /   %

使用注意事项:

1.   除了%操作符以外的运算符的操作数都可以是任何算术类型(即整数和浮点数)。

2.          %运算符要求参与运算的运算对象必须是整数,返回的结果也是整数

3.          /运算符,若两个操作数其中有一个为浮点数则相除的结果也是浮点数,两个整数相除的结果为整数

代码举例:#include<stdio.h>

#include<stdlib.h>

intmain()

{

    float a =18.0;

    int b = 10;

    float c =0.0;

    printf("a+ b=%f\n", a + b);

     printf("%d\n", a % b);//%运算符的两个操作数必须为整数

    printf("a- b=%f\n", a - b);

    printf("a* b=%f\n", a * b);

    printf("a/ b=%f\n", a / b);

    system("pause");

    return 0;

}

二.移位操作符

<< 左移操作符

>> 右移操作符

使用注意事项:

1.   若左移操作符的操作数是二进制数,结果相当于给原操作数乘以2的效果

2.   左移操作符:左边抛弃,右边补0

3.   若右移操作符的操作数是二进制数,结果相当于给原操作数除以2的效果

4.   右移操作符又分为算术右移和逻辑右移

5.   算术右移:左边用原该值的的符号位填充

6.   逻辑右移:左边补0,右边丢弃

代码举例:

#include<stdio.h>

#include<stdlib.h>

intmain()

{

    int num =1;

    printf("%d\n",num<<1);

    printf("%d\n",num >> 1);

    system("pause");

    return 0;

}

#include<stdio.h>

#include<stdlib.h>

intmain()

{

    int num=-1;

    printf("%d\n",num<<1);

    printf("%d\n",num >> 1);

    system("pause");

    return 0;

}

三.位操作符

&  按位与

|   按位或

^   按位异或

使用注意事项:

1.          这些位操作符的操作数必须是整数

代码举例:

#include<stdio.h>

#include<stdlib.h>

intmain()

{

    int num1 =1;

    int num2 =2;

    printf("%d\n",num1&num2);

    printf("%d\n",num1|num2);

    printf("%d\n",num1^num2);

    system("pause");

    return 0;

}

四.赋值操作符 

代码举例

#include<stdio.h>

#include<stdlib.h>

intmain()

{

    int weight= 120;

    weight = 89;

    double salary= 10000.0;

    salary = 20000.0;

    system("pause");

    return 0;

}

使用注意事项:

1.   赋值操作符可以连续使用

如:int a = 10;

intx = 0;

inty = 20;

a = x = y + 1;

2.   复合赋值符

( +=    -=    *=     /=    %=   >>=    <<=   &=  |=   ^= )

以上这些操作符都可以写成复合的效果

代码举例:

#include<stdio.h>

#include<stdlib.h>

intmain()

{

    int x = 10;

    x = x + 10;

    x += 10;//该式与x=x+10是等同的

    system("pause");

    return 0;

}

五.单目操作符

!               逻辑反操作

-                          负值

+               正值

&               取地址

Sizeof           操作数的类型长度(以字节为单位)

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

--               前置、后置--

++              前置、后置++

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

(类型),        强制类型转换转换

代码举例:

#include<stdio.h>

#include<stdlib.h>

intmain()

{

    int a =-10;//-代表负值

    int *p = NULL;

    printf("%d\n",!2);//返回值为0

    printf("%d\n",!0);//返回值为1

    a = -a;

    p = &a;//a的地址赋给p

    system("pause");

    return 0;

}

1.          单目运算符sizeof的用法及注意事项

sizeof不是函数是一个单目运算符,因此运算时可以不加括号

代码举例:

#include<stdio.h>

#include<stdlib.h>

int main()

{

         int a = -10;

         printf("%d\n",sizeof(a));//4

         printf("%d\n",sizeof(int));//4 求int 所创建的变量的字节的大小

         printf("%d\n",sizeof a);//4 sizeof不是函数是一个单目运算符,因此运算时可以不加括号

         /*printf("%d\n",sizeof int);*/ //不加括号不可以

         system("pause");

         return 0;

}

2.sizeof和数组

代码举例:

#include<stdio.h>

#include<stdlib.h>

void test1(int arr[])

{

         printf("%d\n",sizeof(arr));

}

void test2(int ch[])

{

         printf("%d\n",sizeof(ch));

}

int main()

{

         int arr[10] = { 0 };

         char ch[10] = { 0 };

         printf("%d\n",sizeof(arr));//40

1.计算的是整个数组所占的字节长度

         printf("%d\n",sizeof(ch));//10

2.计算的是整个数组所占的字节长度,ch定义的为字符型数组,每一个字符占一个字节

         test1(arr);//

3.输出为4

 函数传参的时候传的是数组的首个元素地址,所以sizeof计算的是首元素字节的大小

         test2(ch);//

4.输出为4

函数传参的时候传的是数组的首个元素地址,所以sizeof计算的是首元素字节的大小,地址的字节永远是4

         system("pause");

         return 0;

}

3.&sizeof和数组

#include<stdio.h>

#include<stdlib.h>

int main()

{

         int arr[10] = { 0 };

         printf("%d\n",sizeof(arr));//1.40

输出的是整个数组的大小,单位为字节;sizeof(数组名)--其中数组名表示的是整个数组

         printf("%p\n",&arr);//

输出的是整个数组的地址,&数组名--其中数组名表示整个数组

         printf("%p\n",&arr + 1);//

输出跳过了整个数组

         system("pause");

         return 0;

}

除过上述两种情况之外,所有的数组名都表示的是数组首元素的地址

4.sizeof内部的表达式不参与运算

代码举例:

#include<stdio.h>

#include<stdlib.h>

int main()

{

         int a = 10;

         short int s = 5;

         printf("%d\n",sizeof(s = a + 4));//输出值为2,因为sizeof内部的表达式不参与运算

         system("pause");

         return 0;

}

5.//++和--运算符

代码举例:

#include<stdio.h>

#include<stdlib.h>

int main()

{

int a = 10;

int x = ++a;

printf("x=%d,a=%d",x,a);//1.x=11,a=11

int y = --a;

printf("y=%d,a=%d",y, a);//2.y=9,a=9

int i = a++;

printf("i=%d,a=%d",i, a);//3.i=10,a=11

int j = a--;

printf("j=%d,a=%d",j, a);//4.j=10,a=9

system("pause");

return 0;

}

.++a,先对a进行自增运算,然后再使用自增后a的值;

--a,先对a进行自减运算,然后再使用自减后a的值;

a++,先使用a的值,然后再对a进行自增运算;

a--,先使用a的值,然后再对a进行自减运算;

6.~按位取反操作符

#include<stdio.h>

#include<stdlib.h>

int main()

{

printf("%d\n", ~0);

system("pause");

return 0;

}

//输出值为-1

~是一个可以对一个数的二进制按位取反的操作符

//00000000000000000000000000000000

//按位取反

//补码形式11111111111111111111111111111111

//反码形式11111111111111111111111111111110

//原码形式10000000000000000000000000000001即为-1

六.关系操作符

>=

<=

!=      用于测试“不相等”

==      用于测试“相等”

七.逻辑操作符

&&  逻辑与                  &  按位与

||   逻辑或                  |  按位或

1&2-------->0

1&&2------->1

1|2---------->3

1||2--------->1

逻辑与和逻辑或的特点:

代码举例:

#include<stdio.h>

#include<stdlib.h>

int main()

{

         int i = 0, a = 0, b =2, c = 3, d = 4;

         /*i =a++&&++b&&d++;*/  //a=1,b=2,c=3,d=4

         i=a++||++b||d++;        //a=1,b=3,c=3,d=4

         printf("a=%d\nb=%d\n c=%d\n d=%d\n", a, b, c, d);

         system("pause");

         return 0;

}

1.逻辑与前面为假,表达式后面不用计算

2.逻辑或前面为真,表达式后面不用计算

八.条件操作符

Exp1 ? exp2 : exp3

如:intb=(a>5)?(3):(-3)

上式等价于:

If(a>5)

{b=3;}

else

{b=-3}

九.逗号表达式             

(exp1,exp2,exp3,…….expN)

使用时注意事项:

1.   逗号表达式,从左向右依次执行

2.   整个表达式的结果是最后一个表达式的结果

.结构成员运算符

代码举例:

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

struct Stu

{

         char name[20];

         int age;

         char id[15];

         char sex[6];

};

void test(struct Stu* ps)

{

         //strcpy(ps->name ,"张三");//strcpy函数为字符串拷贝函数

         //ps->age = 9;

         strcpy((*ps).name,"张三");

         (*ps).age = 9;

}

int main()

{

         struct Stu s;//s向内存申请空间存储成员信息

         test(&s);

         printf("%s\n",s.name);

         printf("%d\n",s.age);

         system("pause");

         return 0;

}

struct结构体

访问结构体成员的两种方式:

1.结构体.成员名 如:strcpy((*ps).name,"张三"),(*ps).age = 9;

2.结构体指针->成员名 如:strcpy(ps->name, "张三") ;ps->age = 9;

这两种命名方式是等价的

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值