C语言运算符简单总结

来源:互联网 发布:淘宝卖的鹿茸是真的吗 编辑:程序博客网 时间:2024/06/03 19:38

1.算术运算符
+ :将两个数从左向右进行相加运算
- :将两个数从左向右进行相减运算
* :将两个数从左向右进行相乘运算
/ :将两个数从左向右进行除法运算,若两数都为整数,则结果为整数部分;若有一为浮点数,则结
果为浮点数
% :对左操作数进行模右操作数运算,即算术求余
++:自增运算,数值加1。b=++a, a先进行自增运算,再把结果赋值给b;b=a++, 先把a的值给b,a再进行自增运算。
- - :自减运算,数值减1。b=–a, a先进行自减运算,再把结果赋值给b;b=a- -, 先把a的值给b,
a再进行自减运算。
举例:

#include<stdio.h>int main(){    int a = 10;    int b = 1;    float c = 5.0;    printf("a = %d, b = %d ,c = %f \n", a, b,c);    printf("a + b = %d \n", a + b);    printf("a - b = %d \n", a - b);    printf("a * b = %d \n", a * b);    printf("a / b = %d\n", a / b);    printf("a / c = %f\n", a / c);    printf("a %% b = %d\n", a % b);    b = ++a;    printf("b = ++a, a= %d, b= %d \n", a, b);    b = --a;    printf("b = --a, a= %d, b= %d \n", a, b);    b = a++;    printf("b = a++, a= %d, b= %d \n", a, b);    b = a--;    printf("b = a--, a= %d, b= %d \n", a, b);    return 0;}

结果:
结果:
2.关系运算符
== :比较两个操作数的值是否相等,相等为真,不等则为假。
!= : 比较两个操作数数是否相等,不等为真,相等为假;
> :检查左边的数是否大于右边的数,如果条件成立,则为真,否则为假。
< :检查左边的数是否小于右边的数,如果条件成立,则为真,否则为假。
>= :检查左边的数是否大于等于右边的数,如果条件成立,则为真,否则为假。
<= :检查左边的数是否小于等于右边的数,如果条件成立,则为真,否则为假。
举例:

#include<stdio.h>int main(){    int a = 10;    int b = 1;    printf("a = %d,b=%d\n", a, b);    if (a == b)        printf("a 等于 b。\n");    else        printf("a 不等于 b。\n");    if (a > b)        printf("a 大于 b。\n");    else        printf("a 小于等于 b。\n");    a = 10;    b = 10;    printf("a = %d,b=%d\n", a, b);    if (a != b)        printf("a 不等于 b。\n");    else        printf("a 等于 b。\n");    if (a <= b)        printf("a 小于等于 b。\n");    else        printf("a 大于 b。\n");    return 0;}

结果:
这里写图片描述
3.逻辑运算符
&& :逻辑与运算符,若两数有一为假,结果为假,否则为真。
|| : 逻辑或运算符,若两数有一为真,结果为真,否则为假。
! :逻辑非运算符,若操作数为真,结果为假,否则为真。
补充:a&&b&&c,若a为假,则不进行后面的运算,a||b||c,若a为真,则不进行后面的运算。
举例:

#include<stdio.h>int main(){    int a = 10;    int b = 1;    printf("a = %d,b = %d\n", a, b);    if (a&&b)        printf("a && b的结果为真。\n");    else        printf("a && b结果为假。\n");    if (a||b)        printf("a || b的结果为真。\n");    else        printf("a || b结果为假。\n");    if (!a)        printf("!a 的结果为真。\n");    else        printf("!a 结果为假。\n");    return 0;}

结果:
这里写图片描述
4.位运算符
& : 将两个数的二进制进行运算(0&1 = 0, 1&1 = 1, 0&0= 0)
| : 将两个数的二进制进行运算( 0|1 = 1, 0|0 = 0,1|1 = 1)
^ : 将两个数的二进制进行运算(1^1 = 0, 1^0 = 1, 0^0 = 0)
>> : 右移操作符,将一个数补码的二进制位进行逻辑右移或者算术右移(若该数不是过大,右移一
位,表达式结果变为原来的1/2)
<< : 左移操作符,将一个数补码的二进制位进行左移,低位补0(若该数不是过大,左移一位,表
达式结果变为原来的2倍)
~ : 将一个数的二进制进行取反操作(1变为0,0变为1)
补充:(正数的源码=补码=反码,负数的反码:源码的符号位不变,其他位取反;补码:反码
+1。)
(逻辑右移: 右边丢弃,左边补0。算术右移:右边丢弃,左边补符号位。且移位方式取决
于编译器)
举例:

#include<stdio.h>int main(){    int a = 20;//二进制0001 0100    int b = 10;//二进制0000 1010    printf("a & b = %d\n", a & b);  //二进制0000 0000 十进制0    printf("a | b = %d\n", a | b);  //二进制0001 1110 十进制30    printf("a ^ b = %d\n", a^b);    //二进制0001 1110 十进制30    printf("a >>1 = %d\n", a >> 1); //二进制0000 1010 十进制10    printf("a <<1 = %d\n", a << 1); //二进制0010 1000 十进制40    printf("  ~b  = %d\n", ~b);     //二进制1111 0101 十进制-11的补码    return 0;}

结果:
这里写图片描述
5.赋值运算符
= : 将右边操作数的值赋给左边
+=: 加且赋值运算符,将左边操作数加上右边操作数的结果赋给左边操作数
-=: 减且赋值运算符,将左边操作数减上右边操作数的结果赋给左边操作数
*=: 乘且赋值运算符,将左边操作数乘以右边操作数的结果赋给左边操作数
/=: 除且赋值运算符,将左边操作数除以右边操作数的结果赋给左边操作数
%=: 求模且赋值运算符,将左边操作数对右边操作数求模的结果赋给左边操作数
… …
举例:

#include<stdio.h>int main(){    int a = 20;    int b = 10;    printf("a = %d, b = %d\n", a, b);    printf("a += b,a = %d\n",a+=b);    printf("a -= b,a = %d\n",a-=b);    printf("a *= b,a = %d\n",a*=b);    printf("a /= b,a = %d\n",a/=b);    return 0;}

结果:
这里写图片描述
6.其他操作符
sizeof() :求取操作数所占空间大小(以字节为单位,若括号中有运算,则不更新值,只将值作为判断使用)

* : 间接访问操作符

& : 取地址操作符(当&作为単目操作符时)

(a=0?1:0): (?:)条件表达式,a=0为真,将1赋给a,否则将0赋给a。

[ ] : 下标引用操作符

-> / . : 指向结构体成员运算符,使用一个指向结构体或对象的指针访问其内成员。

, : 逗号运算符。将两个及以上的表达式结合起来,从左向右进行运算,整个表达式的值为最后一
个表达式的值。

(转换类型)变量:强制类型转换

举例:

#include<stdio.h>#include<string.h>struct School{    char name[20];    char address[20];    int telephone;};int main(){    int a[10] = { 1,2,3,4,5 };    int b = 5;    int *p = &a[0];//将数组a的地址赋给指针p    printf("\n数组部分:\n");    printf("数组a的所占内存长度为: %d\n", sizeof(a));    printf("数组a的地址为:%p\n", &a);    printf("p=&a[0]的值为:%p\n", p);    printf("数组a的首元素地址为:%p\n", &a[0]);    printf("数组a的首元素地址为:%p\n", a);    printf("\n强制类型转换部分:\n");    b = (int)6.66;//强制类型转换    printf("b=(int)6.66的结果是:%d\n", b);    printf("\n逗号运算符:\n");    b = (6+1, 7+1, 8+1);//逗号运算符    printf("b = (6+1, 7+1, 8+1)的结果是:%d\n", b);    printf("\n结构体:\n");    struct School school = { 0 };//结构体    strcpy(school.address, "陕西西安临潼\n");    printf("地址是:%s", school.address);    struct School *q=&school;    strcpy(q->name, "西安工程大学\n");    printf("名称; %s", q->name);    (*q).telephone = 123456789;    printf("电话:%d\n", (*q).telephone);    return 0;}

结果:
这里写图片描述

原创粉丝点击