C语言运算符简单总结

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;
}

结果:
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值