Care and diligence bring luck. If I can't hear your heartbeat, you're too far away. 时隔一月有余,匆匆带来这篇 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
关系运算符用于比较数值的大小,一共分为六种:大于(>)、小于(<)、等于(=)、大于等于(>=)、小于等于(<>)、等于(=)、大于等于(>关系运算符均为双目运算符,结果为整型,且只有两种:0 或 1,0 代表 假(错误),1 代表 真(正确) // 关系运算符的优先级在算术运算符之后,赋值运算符之前 c = a + b > 3; // 先将 a + b 再和 3 做比较,最后赋值给 c
逻辑运算符是根据表达式的值来返回真(1)假(0),一共提供了三种运算符:逻辑与(&&),逻辑或(||),逻辑非(!)。逻辑与、逻辑或均为双目运算符,具有左结合性(从左至右依次执行),逻辑非为单目运算符,具有右结合性 逻辑与(&&) 参与运算的两个量都为真时,结果为真,否则为假 4>3 && 3>2 // 结果为真,即 1 逻辑或(||) 参与运算的两个量只要有一个为真,结果就为真,只有两个量都为假时,才为假 4>3 || 3<2 //="" 结果为真,即="">2> 逻辑非(!) 参与运算量为真,结果就为假,否则为真 !(5>4) // 结果为假,即 0 注:虽然上面都是用 1 代表 真,0 代表 假,但是反过来判断一个量为 真 还是 假 的时候,用 非0 代表 真,0 代表 假,即 5 || 0 // 结果为真 5 && 0 // 结果为假
位运算符作用于位,并逐位执行操作,可以分为两类:位逻辑运算符、移位运算符。 位逻辑运算符 按位与(& / and)、按位或(| / or)、按位异或(^)、按位取反(~) 按位与 将参与运算的两个数对应的二进制位相与,只有对应的二进制均为 1 时,结果的对应位才为 1,否则为 0 13 & 5 00001101 按位或 将参与运算的两个数对应的二进制位相或,只要对应的两个二进制有一个为 1 时,结果就为 1,只有都为 0 时,结果才为 0 13 | 5 00001101 00000101 结果为 00001101 输出为 13 按位异或 将参与运算的两个数对于的二进制位相异或,当对应的二进制位上的数字不相同时,结果为 1,否则为 0 13 ^ 5 00001101 00000101 结果为 00001000 输出为 8 按位取反 将运算数的各个二进制位按位取反 ~13 00001101 结果为 11110010 注:这里会牵扯到负数的符号问题(二进制中用最前面的 1 来代表负数),又会引申出补码相关内容(以后有需要再讲解吧) 优先级 按位与、按位或、按位异或 都是双目运算符,其结合性都是从左向右,优先级高于逻辑运算符,低于关系运算符,从高到低依次是 移位运算符 左移(<)、右移(>>) 左移(<> 将 a = 13 a <> 右移(>>) 将 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="" 为="">
常见优先级 算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符 注:逻辑运算符中的逻辑非(单目)优先级高于算术运算符 完整优先级列表
|
|