zoukankan      html  css  js  c++  java
  • C语言基础丨运算符之赋值运算符(五)

    赋值操作是程序设计中最常用的操作之一,C 语言共提供了 11 个赋值运算符,均为二元运算符,其中仅有一个为基本赋值运算符 =,其余 10 个均是复合赋值运算符,即:

    (1)简单赋值运算符" = "

    用法: 变量标识符 = 表达式

    作用:将一个数据(常量或表达式)赋给一个变量 ,左侧必须是变量,不能是常量或表达式

    注意:

    1>.在程序中可以多次给一个变量赋值,每赋一次值,与该变量相应的存储单元的数据就被更新一次,内存中当前的数据就是最后一次所赋值的那个数据。即,最左边变量所得到的新值是整个赋值表达式的值。

    2>.赋值运算符的优先级别高于逗号运算符。

    3>.注意赋值运算符“=”和等于运算符“==”的差别

    4>.赋值运算符的左侧只能是变量,而不能使常量或表达式。右侧可以是表达式,包括赋值运算表达式。“a=b=1+1”是对的,而“a=1+1=b”是错的(原因:由于赋值运算表达式的结合方式是从右到左,其第一个赋值表达式的左侧是常数,所以错误)

    (2)类型转换

    赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型

    【1】实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分

    【2】整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中

    【3】长度相同的有符号与无符号整型数间,原样赋值,但数值有时会有变化

    【4】char、int、long 等类型的转换

        1)“短”数据赋给“长”变量

        符号扩展:若最高位位1(负数),则变量高字节位补1;反之,补0。

        2)“长”数据赋给“短”变量

        只将数据的低字节位原封不动送到变量中(数据有可能有差错)。

    (3)复合赋值运算符:

    在赋值符“ = ”之前加上其它运算符,构成复合赋值运算符。

    种类:+=(加赋值)、-=(减赋值)、*=(乘赋值)、/=(除赋值)、%=(求余赋值)、  <<=(左移赋值)、>>=(右移赋值)、&=(按位与赋值)、|=(按位或赋值)、*A=(按位异或赋值)。

    注意:

    1>.两个符号之间不可以有空格

    2>.复合赋值运算符的优先级与赋值运算符的相同。表达式n+=1等价于n=n+1,作用是去变量n中的值增1再赋值给变量n,其他复合赋值运算符的运算规则以此类推。

    例:求表达式a+=a-=a*a的值

    解:先进行“a-=a*a”运算,相当于a=a-a*a=12-144=-132

    再进行“a+=-132”运算,相当于a=a+(-132)=-132-132=-264

    3>.如果赋值运算符两侧的类型不一致,在赋值前系统将自动先把右侧的值或通过表达式求得的数值按赋值号左边变量的类型进行转换。

    赋值操作的优先级较低,仅高于逗号运算符。

    实例

    请看下面的实例,了解 C 语言中所有可用的赋值运算符:

    #include <stdio.h>

    main()

    {

      int a = 21;

      int c ;

      c =  a;

      printf("Line 1 - =  运算符实例,c 的值 = %d ", c );

      c +=  a;

      printf("Line 2 - += 运算符实例,c 的值 = %d ", c );

      c -=  a;

      printf("Line 3 - -= 运算符实例,c 的值 = %d ", c );

      c *=  a;

      printf("Line 4 - *= 运算符实例,c 的值 = %d ", c );

      c /=  a;

      printf("Line 5 - /= 运算符实例,c 的值 = %d ", c );

      c  = 200;

      c %=  a;

      printf("Line 6 - %= 运算符实例,c 的值 = %d ", c );

      c <<=  2;

      printf("Line 7 - <<= 运算符实例,c 的值 = %d ", c );

      c >>=  2;

      printf("Line 8 - >>= 运算符实例,c 的值 = %d ", c );

      c &=  2;

      printf("Line 9 - &= 运算符实例,c 的值 = %d ", c );

      c ^=  2;

      printf("Line 10 - ^= 运算符实例,c 的值 = %d ", c );

      c |=  2;

      printf("Line 11 - |= 运算符实例,c 的值 = %d ", c );

    }

    当上面的代码被编译和执行时,它会产生下列结果:

    Line 1 - = 运算符实例,c 的值 = 21

    Line 2 - += 运算符实例,c 的值 = 42

    Line 3 - -= 运算符实例,c 的值 = 21

    Line 4 - *= 运算符实例,c 的值 = 441

    Line 5 - /= 运算符实例,c 的值 = 21

    Line 6 - %= 运算符实例,c 的值 = 11

    Line 7 - <<= 运算符实例,c 的值 = 44

    Line 8 - >>= 运算符实例,c 的值 = 11

    Line 9 - &= 运算符实例,c 的值 = 2

    Line 10 - ^= 运算符实例,c 的值 = 0

    Line 11 - |= 运算符实例,c 的值 = 2

    今天就分享到这里啦,希望对大家学习有所帮助!


     如果你想更好的提升你的编程能力,学好C语言C++编程!加入【C语言C++学习企鹅圈子】,有一些(源码、项目实战视频、项目笔记,基础入门教程)分享哟!欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

     
  • 相关阅读:
    redis未授权访问简单总结
    CORS跨域资源共享漏洞初探
    Mysql UDF提权方法
    hacknos-player靶机渗透
    深入理解Java虚拟机-类加载连接和初始化解析
    Dnslog盲注
    让服务器使用密钥
    自动备份站点
    自动放行nginx后台访问ip
    mysql增备
  • 原文地址:https://www.cnblogs.com/mu-ge/p/14341529.html
Copyright © 2011-2022 走看看