分享

常量、变量、运算符

 长沙7喜 2018-04-16

Care and diligence bring luck.


If I can't hear your heartbeat, you're too far away.


时隔一月有余,匆匆带来这篇 C++ 基础,向大家介绍 常量、变量、运算符 等内容,希望可以带领大家开始迈入 C++ 的世界


    C++ 基础


常量与变量

常量 

常量是指在程序中使用的一些具体的数、字符,在程序运行的过程中,常量的值是无法被更改的


整型常量

表示整数的常量,有三种表现形式

  十进制:如 22、33   八进制:以 0 开头,由 0-7 构成,如 012   十六进制:以 0x 开头,如 0x12A


实型常量

又称实数或浮点数,如 3.1、-5.1E+2(科学记数法)


字符常量

用单引号包括起来的字符,如 'a'、'1'

注:此处是用单引号包括,如果是用双引号包括('a'),被称为字符串,相对应的就是字符串常量,而不是字符常量


常量定义的两种方法

常量除了可以直接调用,还可以给常量取个名字,即用一个标识符来代表它,这里以标识符形式出现的常量,也就是常量的定义


符号常量

利用 #define 与 C++ 本身没有关系,它是一个编译器指令,或者称为预处理指令,所以写在最上面)来定义

  #define 标识符 常量字符   #define PI 3.14159

注:没有分号


常值变量

利用 const (C++ 的一个关键字)关键字定义

  const 标识符 = 常量字符;   const double PI = 3.14159;


上面两种方法,推荐使用 const 来定义常量

  const 可以定义数据类型,提高了类型安全性,如上面的 double   const 作为一个常值变量,适用面更加广,语法上也更好理解

注:常量名一般用大写,而变量名用小写,以便于区分


变量

变量代表了一个存储单元,其中的值是可以改变的,因此称为变量。为了区别不同的变量,必须给每个变量(存储单元)取一个名(称为变量名),该变量(存储单元)存储的值称为变量的值,变量中能够存储值得类型为变量的类型


变量名

用一个合法的标识符来代表一个变量,如 n, m 等都是合法的变量名。在程序中用到的变量需要先定义后使用,变量名应遵循自定义标识符的命名规则

  命名规则:   变量名只能由字母、数字、下划线组成,必须由字母或下划线开头,不能用 关键字来命名,区分大小写

注:对于变量名的长度,不同的 C++ 编译器有不同的规定,考虑到系统的可移植性,变量名一般不要超过8个字符


    变量的定义

    数据类型 变量表

      // C++ 允许在定义变量的同时为变量赋初值   int i = 1;


    变量的访问

    变量一经定义,系统就在计算机内存中为其分配一个存储空间,在程序中使用到变量时,就在相应的内存中存入数据或取出数据,这种操作被称为变量的访问


    变量的类型

    变量可以是标准数据类型 int、short、long、float、double、char 等,也可以是用户自定义的各种类型(这些数据类型在下面)


    运算符

    算术运算符

    算术运算符用于各类数值的运行,一共分为七种:加(+)、减(-)、乘(*)、除(/)、求余(%)、自增(++)、自减(--)


    模运算符(%)

    模也称为求余或取余,模运算符即求余运算符(余在这里表示余数,也就是获得余数的运算符),运算所需变量为两个,所以是双目运算符

      // 5 除以 2 的余数为 1   a = 5 % 2;

    注:两个变量必须都为整型


    除法运算符(/)

    C++ 中的除法运算符有一些特殊之处:如果 a、b 均是整型,那么除法获得的是它们的商

      // 5 除以 2 为 2   a = 5 / 2;   // 5.0 除以 2 为 2.5   a = 5.0 / 2;


    自增自减运算符(++,--)

    自增、自减运算符用来对一个操作数进行加1或减1运算,其结果仍然赋予该操作数,操作数只能是变量,不能是常量或表达式

      // 自增 x++,即 x = x + 1   x++;   // 自减 x--,即 x = x - 1   x--;

    注:x++ 和 ++x 的区别

      // 在表达式中使用,区别在于 x++ 先赋值,再运算,++x,先运算,再赋值   a = x++;  // 等价于 a = x;  x = x + 1;   a = ++x;  // 等价于 x = x + 1;  a = x;


      #include   using namespace std;   int main()   {       int i = 0;       cout < i++="">< endl;=""  =""  =""  ="" i="">
          cout < ++i="">< endl;=""  =""  =""  ="" return="">
      }   // 输出   // 0   // 1


    关系运算符

    关系运算符用于比较数值的大小,一共分为六种:大于(>)、小于(<)、等于(=)、大于等于(>=)、小于等于(<>关系运算符均为双目运算符,结果为整型,且只有两种:0 或 1,0 代表 假(错误),1 代表 真(正确)

      // 关系运算符的优先级在算术运算符之后,赋值运算符之前   c = a + b > 3;  // 先将 a + b 再和 3 做比较,最后赋值给 c


    逻辑运算符

    逻辑运算符是根据表达式的值来返回真(1)假(0),一共提供了三种运算符:逻辑与(&&),逻辑或(||),逻辑非(!)。逻辑与、逻辑或均为双目运算符,具有左结合性(从左至右依次执行),逻辑非为单目运算符,具有右结合性


    逻辑与(&&)

    参与运算的两个量都为真时,结果为真,否则为假

      4>3 && 3>2  // 结果为真,即 1


    逻辑或(||)

    参与运算的两个量只要有一个为真,结果就为真,只有两个量都为假时,才为假

      4>3 || 3<2  //="" 结果为真,即="">


    逻辑非(!)

    参与运算量为真,结果就为假,否则为真

      !(5>4)  // 结果为假,即 0

    注:虽然上面都是用 1 代表 真,0 代表 假,但是反过来判断一个量为 真 还是 假 的时候,用 非0 代表 真,0 代表 假,即

      5 || 0  // 结果为真   5 && 0  // 结果为假


    位运算符

    位运算符作用于位,并逐位执行操作,可以分为两类:位逻辑运算符、移位运算符。


    位逻辑运算符

    按位与(& / and)、按位或(| / or)、按位异或(^)、按位取反(~)


    按位与

    将参与运算的两个数对应的二进制位相与,只有对应的二进制均为 1 时,结果的对应位才为 1,否则为 0

      13 & 5   00001101
      00000101   结果为   00000101   输出为   5


    按位或

    将参与运算的两个数对应的二进制位相或,只要对应的两个二进制有一个为 1 时,结果就为 1,只有都为 0 时,结果才为 0

      13 | 5   00001101   00000101   结果为   00001101   输出为   13


    按位异或

    将参与运算的两个数对于的二进制位相异或,当对应的二进制位上的数字不相同时,结果为 1,否则为 0

      13 ^ 5   00001101   00000101   结果为   00001000   输出为   8


    按位取反

    将运算数的各个二进制位按位取反

      ~13   00001101   结果为   11110010

    注:这里会牵扯到负数的符号问题(二进制中用最前面的 1 来代表负数),又会引申出补码相关内容(以后有需要再讲解吧)


    优先级

    按位与、按位或、按位异或 都是双目运算符,其结合性都是从左向右,优先级高于逻辑运算符,低于关系运算符,从高到低依次是 & ^ | 


    移位运算符

    左移(<)、右移(>>)


    左移(<>

       左边的运算数的各二进制位向左移若干位,  右边的数是指定移动的位数,高位丢弃,低位补 0

      a = 13   a <>
      00001101   // 左移 3 位   01101000


    右移(>>)

    将 >> 左边的运算数的各二进制位全部右移若干位,>> 右边的数是指定移动的位数

      a = 13   a >> 3   00001101   // 右移 3 位   00000001

    注:对于有符号的数,在右移时,符号位将随同移动,当操作数位正,最高位为 0,而为负数,最高位为 1(最高位是补 0 或补 1 取决于编译系统的规定),这里比较复杂

    赋值运算符

    基本的赋值运算符即 =,也就是把右边操作数的值赋给左边操作数,除了基本的赋值运算符,还有复合赋值运算符,将运算符与赋值运算符(=)组合使用,复合赋值运算符有以下几种

      += 加法赋值   -= 减法赋值   *= 乘法赋值   /= 除法赋值   %= 模运算赋值   // 以下不怎么常用   <= 左移赋值=""  ="">>= 右移赋值   &= 位逻辑与赋值   |= 位逻辑或赋值   ^= 位逻辑异或赋值


    赋值语句

    赋值语句是由赋值表达式再加上分号构成的表达式语句,它是程序中使用最多的语句之一,在 C++ 语言中,= 作为赋值运算符,而不表示 等于 判断(用 == 作为 等于 判断)

      变量 = 表达式;

    注1:赋值语句中右边的表达式也可以是赋值语句,也就是说可以写成下面的样子

      变量 = 变量 = 表达式;   // 例如   a = b = c = 1;   // 等价于   a = 1;   b = 1;   c = 1;

    注2:如果赋值运算符(=)两边的数据类型不同,系统将会自动进行类型转换,即将右边的数据类型转换成左边的变量类型,例如

      // 变量 a 是整型,b 是 浮点型,后面的赋值会自动去掉小数部分,只获取整数   int a;   folat b;   b = 1.1;   a = b;   cout < a="">< endl;=""  //="" 输出="" a="" 为="">


    运算符的优先级

    常见优先级

    算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符

      注:逻辑运算符中的逻辑非(单目)优先级高于算术运算符


    完整优先级列表


    优先级操作符描述结合性
    1::作用域解析从左到右
    2++   --后缀 自增、自减
    ()函数调用
    []数组下标
    .通过引用选择成员
    −>通过指针选择成员
    3++   --前缀 自增、自减从右到左
    +   正、负
    !   ~逻辑非、按位非
    (type)显式类型转换
    *解引用
    &取地址
    sizeof取对象大小
    newnew[]动态内存分配
    deletedelete[]动态内存去分配
    4.*   ->*成员指针运算符从左到右
    5*   /   %乘、除、求余
    6+   加、减
    7   >>按位左移、按位右移
    8   <>小于、小于或等于
    >   >=大于、大于或等于
    9==   !=等于、不等于
    10&按位与
    11^按位异或
    12|按位或
    13&&逻辑与
    14||逻辑或
    15?:三目运算符从右到左
    =赋值
    +=   −=加法/减法赋值运算符
    *=   /=   %=乘法/除法/取余赋值运算符
    <>   >>=按位左移/右移赋值运算符
    &=   ^=   |=按位与/异或/或赋值运算符
    throw抛出异常
    17,逗号从左到右




      本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
      转藏 分享 献花(0

      0条评论

      发表

      请遵守用户 评论公约

      类似文章 更多