c语言操作符详解

07-21 1325阅读

前言:

        在大家学习语言或者使用语言的过程中,经常会遇到各种各样的操作符计算,由于大家学习时间跨度比较大,或者基础不扎实等问题,经常会将操作符相关问题搞混。在此,特地为解决上述问题,写了一篇博客以期能够帮助大家!

操作符的分类:

  • 算术操作符:+、-、*、/、%
  • 移位操作符:>
  • 位操作符:&、|、^、~
  • 赋值操作符:=、+=、-=、*=、/=、%=、=、&=、|=、^=
  • 单目操作符:!、++、--、&、*、+、-、sizeof、(类型)
  • 关系操作符:>、

    1.算术操作符

            对于算术操作大家应该比较熟悉,在我们从小到大的学习生活中经常会用到,但是值得注意的是这里面的“/”与“%”操作符的使用,在计算机语言中的使用可能与大家之前接触的不太一样,大家可能经常会搞混淆。在此,特地为大家总结一下,方便大家学习。

     1.1  /  用来执行除法

              “ / ”的两个操作符都为整数,那么最终计算结果也只会返回整数部分。

    举例代码如下:

    c语言操作符详解

             根据运行结果大家可以看到,尽管a是float(浮点数)类型,但是其运行结果仍然只是保留了整数部分!原因是在C语言中,整除只会最终保留整数部分,舍去小数部分。这里注意小数部分不是四舍五入,而是直接舍弃!

            要想实现最终返回值包含浮点数部分,那么“ / ”的两个操作数至少有一个要是浮点型的数字。

    举例代码如下:

    c语言操作符详解

    趁热打铁:

    c语言操作符详解

    对于这个计算结果,大家可能还心存疑惑,难道结果不应该是2嘛?注意,这边就是用到上面提到的内容,C语言中的整除会舍弃小数,这边 (a / 100)的结果是0,所以最终运行的结果会是0!

    1.2 % 用来执行取余(取模)

            %在C语言中这个叫取模运算符,其操作数只能是整数,不能用于浮点数。其运算结果返回的是操作数相除的余数。

    举例代码如下:

     c语言操作符详解

            特别声明:对于负数的取模运算,正负决定于第一个操作数的正负。

    举例代码如下:

    c语言操作符详解

    2.移位操作符

            > 右移操作符:

            注意1:移位操作数只能是整数!并且操作符的作用对象是二进制的补码,故在此之前希望大家熟悉在计算机内部的计算法则和原码、反码、补码的相关知识点。这部分内容,我也会在后期专门出一个文章来介绍。

            注意2:对于移位操作符,不能移动负数位。这个标准是未定义的。

    例如:

    c语言操作符详解

    2.1左移操作符:

            在二进制补码序列中,采取的规则是:左边抛弃,右边补0。  

    举例代码如下:

    c语言操作符详解

    基于二进制补码的微观操作如下:

    c语言操作符详解

    2.2右移操作符:    

            规则是:右边抛弃,左边用该数的符号位补充。但是要注意区分正数和负数的区别!

    正数的二进制补码最左边的为0,负数为1。

    c语言操作符详解

    3.位操作符

    注意:也都是在二进制补码中进行计算。

    运算规则:对于两个操作数的补码,进行上下对照,然后按照运算规则得出一个新的序列。

    c语言操作符详解

    • & :两个有0就是0,全为1才是1;
    • |  :两个有1就是1,全为0才是0;
    • ^ : 两个相同为0,相异为1;
    • ~ :是一个单目操作符,将操作数的补码全部取反,即0变成1,1变成0;

      举例代码如下:

      c语言操作符详解

      c语言操作符详解

      c语言操作符详解

      c语言操作符详解

      一道变态面试题:

      //变态面试题:实现两个数字交换(在不创建第三个变量的前提下)
      int main()
      {
         int a = 3;
         int b = 6;
         a = a ^ b;
         b = a ^ b;
         a = a ^ b;
         printf("%d %d", a, b);
         return 0;
      }
      

      4.赋值操作符

              赋值操作符相对来说比较好理解。但是在这边特别需要关注两个点。

      • 区分“ = ”与“ == ”: “ = ”用于赋值,比如在给变量进行初始化时;“ == ”代表的时等于,等价于我们日常生活中两个数字相等。
      • 其余的赋值操作符都有相同的运算法则。

                举例代码如下:

        int main()
        {
        	int a = 10;//这边给a赋值为10
        	int b = 20;//这里给b赋值为20
        	int a = b;//这里是将b的值赋值给a
        	a += b;//等价于:a = a + b;
        	a  
        

                这两个操作符主要用在结构体中,来对结构体中的成员变量进行访问。

        • 、 :主要用于对结构体成员变量的直接访问。
        • ->  :  主要用于对结构体成员变量的间接访问(指向结构体的指针变量)。这个设计的内容较为复杂,需要在大家熟练掌握指针和结构体相关知识点时才能更好的学习。在作者后期的博客也会有介绍,欢迎大家查询学习。
          struct student {
          	int x;
          	int y;
          }pa = {1,2};
          int main()
          {
          	printf("%d %d", pa.x, pa.y);
          	//输出结果为 1 2
          	return 0;
          }

                  以上是操作符的分类及其用法的总结,希望大家能够通过这篇文章更好了解操作符相关知识!同时由于作者知识水平有限,可能会存在更好的表达方法或者存在错误,也欢迎各位老师能够在评论区批评指正!

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]