C语言的运算符你了解吗

编辑: admin 分类: c#语言 发布时间: 2021-12-12 来源:互联网
目录
  • 前言
  • 一、算数运算符(数学运算) 
    • + -
    • * / %
  • 二、逻辑运算符(判断真假)
    • || &&
    • > >= < <=
    • !
    • ? : 三元运算符
  • 三、位运算符(重点) 
    • << 左移
    • >> 右移
    • & | ^ ~ 与 或 异或 取反
  • 四、赋值运算符
    • 五、内存访问符号
      •  () 限制符/函数访问符
      • [] 内存访问ID符
      • {} 函数体限制符
      • -> 地址访问符 
      • &取址符
      • *取值符
    • 总结

      前言

      自学笔记,没有历史知识铺垫(省略百度部分)C语言运算符的使用

      一、算数运算符(数学运算) 

      + -

      左右数据同一数据类型

      * / %

      注意

      乘/除法在很多CPU中无法实现,或者需要多个CPU周期去实现嵌入式开发中,乘/除法可能需要第三方乘法库才能实现乘/除法可能导致程序的移植性变差

      %取模 场景:

      获取范围数值时,如:int result=(x%100)+1; 则result值的范围为[1.100]得到m进制的个位数,如8进制个位数: int a=x%8;介于取模的特性,可以用在循环数组结构中获取下标,0,1,2,3,0,1,2,3,0,1,2…

      二、逻辑运算符(判断真假)

      || &&

      逻辑或 逻辑与

      > >= < <=

      大于 大于等于 小于 小于等于

      !

      ? : 三元运算符

      三元运算符

      三、位运算符(重点) 

      << 左移

      运算场景:
      左移1位,数据=数据2
      m左移n位,m=m2ⁿ

      >> 右移

      运算场景:
      右移1位,数据=数据/2
      m右移n位,m=m/2ⁿ

      注意:
      signed和unsigned的右移动是不同的
      signed修饰的变量的右移做while条件且变量为负数时,while会进入死循环(因为最高位=1,是符号位,永远无法右移为0)

      & | ^ ~ 与 或 异或 取反

      & 与
      bit中任意一位与0相&,该位都为0
      场景:

      屏蔽清零器 a=a | (~(0x1<<n))
      int a=0x1234;
      //屏蔽低8位
      a=a& 0xff00;
      
      int a=0x1234;
      //清零器,清除bit第五位的高电平,转为低电平,其他位不变
      a=a & (~(0x1<<5));
      

      | 或
      bit中任意一位与1相|,该位都为1
      场景:

      保留/设置:设置高电平的方法,如设置指定位为高电平,其他位不变 a=a | (0x1<<n)
      int a=3;
      //使用左移可以更方便快速的让第五位bit处于高电平,而且不影响其他位(嵌入式中bit最右边通常读作第0位)
      a= a| (0x1<<5)
      

      ^ 异或
      相同为0,不同为1
      1.通常用于数据加密算法,AES SHA1等
      2.数据交换(排序中的一种方法)

      a=a^b;

      b=a^b;
      a=a^b;

      ~ 取反
      按位取反

      四、赋值运算符

      = += -= &= ...
      赋值运算实际上是组合运算的缩写,非原子性操作,volatile内存可见特性会失效(实际上执行了两步,只靠volatile无法解决)

      五、内存访问符号

       () 限制符/函数访问符

      1.限制符

      (a+b)*c
      

      1.函数访问符

      void fun();

      [] 内存访问ID符

      内存访问ID符(C语言中并不局限于数组的访问,通过指针可以访问整个内存空间)

      a[0]
      a[1]
      

      {} 函数体限制符

      函数体限制符

      -> 地址访问符 

      .变量访问符 

      &取址符

      &a;

      *取值符

      *a;

      总结

      本章主要为C语言运算符的使用

      本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注海外IDC网的更多内容!

      【转自:荷兰服务器