C语言学习笔记[15]:初识操作符②

操作符

  • 算数操作符:+ - * / %
  • 移位操作符:>>  <<
  • 位操作符:& | ^
  • 赋值操作符:=  +=  -=  *=  /=  %=  >>=  <<=
  • 单目操作符:!  -  +  &  sizeof  ~  --  ++  *  (类型)
  • 关系操作符:>  >=  <  <=  ==  !=
  • 逻辑操作符:&&  ||
  • 条件操作符(三目操作符):exp1 ? exp2 : exp3
  • 逗号表达式:exp1,exp2,...,expN
  • 下标引用、函数调用和结构成员:[ ]  ( )   .   ->

在这里先做大概的讲解,后续再做详细讲解。

单目操作符

操作符 ~

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

#include <stdio.h>

int main()
{
    int a = 0;
    printf("%d\n", ~a);
    return 0;
}

我们已知整数在内存中的存储方式为补码

而一个数的表示方式有三种:

原码

反码

补码

对于负数的原码、反码、补码:

-1的原码:首位为符号位,1为负,0为正

1000000 00000000 00000000 00000001

-1的反码:原码符号位不变,剩下的位按位取反

11111111 11111111 11111111 11111110

-1的补码:反码加1

11111111 11111111 11111111 11111111

对于正数的原码、反码、补码:

原码、补码、反码相同。

把所有二进制位中的数字,1变成0,0变成1

a = 0 的二进制为:

00000000 00000000 00000000 00000000

按位取反后的 ~a:

11111111 11111111 11111111 11111111

我们已知 ~a 的补码,说明 ~a 是负数,则可以得到 ~a 的反码:

11111111 11111111 11111111 11111110

得到 ~a 的补码,则可以知道 ~a 的原码:

10000000 00000000 00000000 00000001

将 ~a 的原码转为十进制为:

-1

操作符 -- ++

前置 --/++:

先 --/++,后使用

#include <stdio.h>

int main()
{
    int a = 10;
    int b = ++a; //前置自增
    printf("a = %d, b = %d\n", a, b);
    b = --a; //前置自减
    printf("a = %d, b = %d\n", a, b);
    return 0;
}

后置 --/++:

先使用,后 --/++

#include <stdio.h>

int main()
{
    int a = 10;
    int b = a++; //后置自增
    printf("a = %d, b = %d\n", a, b);
    b = a--; //后置自减
    printf("a = %d, b = %d\n", a, b);
    return 0;
}

 

操作符 (类型)

强制类型转换

#include <stdio.h>

int main()
{
    // 将浮点数 3.14 强制转换为整数并赋值给变量 a
    int a = (int)3.14;
    printf("%d\n", a);
    return 0;
}

逻辑操作符

操作符 &&

逻辑与,并且的意思,两边都为真则结果为真,两边有一个为假则结果为假

#include <stdio.h>

int main()
{
    int a = 3;
    int b = 4;
    int c = 0;
    int d = a && b; // 3 && 4 = 1
    int e = b && c; // 4 && 0 = 0
    printf("d = %d\n", d);
    printf("e = %d\n", e);
    return 0;
}

操作符 ||

逻辑或,或者的意思,两边有一个为真则结果为真,两边全为假则结果为假

#include <stdio.h>

int main()
{
    int a = 3;
    int b = 0;
    int c = 0;
    int d = a || b;// 3 || 0 = 3
    int e = b && c;// 0 && 0 = 0
    printf("d = %d\n", d);
    printf("e = %d\n", e);
    return 0;
}

条件操作符(三目操作符):

exp1 ? exp2 : exp3

表达式1 ? 表达式2 : 表达式3

若 表达式1 成立,则整个表达式的结果为 表达式2 的结果

若 表达式1 不成立,则整个表达式的结果为 表达式3 的结果

#include <stdio.h>

int main()
{
    int a = 3;
    int b = 4;
    int max = 0;
    //常规if判断
    if(a > b)
        max = a;
    else
        max = b;
    printf("两数较大的是:%d\n", max);
    //表达式判断
    max = a > b ? a : b;
    printf("max = %d\n", max);
    return 0;
}

逗号表达式

exp1,exp2,...,expN

被逗号隔开的一窜表达式,整个逗号表达式从左向右依次计算,整个逗号表达式的结果是其最后一个表达式的结果

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 3;
    int c = 5;
    int d = (a = b + 2, c = a - 4, b = c + 2);
    //a = 3 + 2 = 5, c = 5 - 4 = 1, b = 1 + 2 = 3, d = 3
    printf("d = %d\n", d);
    return 0;
}

下标引用、函数调用和结构成员

下标引用操作符 [ ]

数组访问元素时使用的 [ ] 为下标引用操作符

#include <stdio.h>

int main()
{
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    printf("arr[5] = %d\n", arr[5]);//此处的 [] 是下标引用操作符
    return 0;
}

函数调用操作符 ( )

调用函数的时候,函数名后面的 ( ) 就是函数调用操作符

#include <stdio.h>

int main()
{
    //调用printf函数,此处的 () 为函数调用的操作符
    printf("Hello, world!\n");
    return 0;
}
  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值