语言 | C 与 C++ 语言基础Ⅰ:变量、运算符、表达式



变量

变量是装数据的容器,数据变,容器不变。
变量在使用前要先定义

1
2
3
4
5
// 变量类型名 变量名1 变量名2
int a, b, c;

// 定义变量时初始化
int a=0, b, c=0;

变量名

  • 是由字母和数字组成的序列,但第一个字符必须为字母;
  • 大小写字母有区别;
  • 如 int 等关键字,已被语言本身占有,不能作为变量名

变量类型

  • char 字符型 占用一个字节长度,存放一个字符
  • int 整型 占4个字节
  • float 单精度浮点型
  • double 双精度浮点型
1
2
3
4
5
6
7
#include <iostream>
using namespace std;
int main()
{
cout<<sizeof(int)<<endl;
return 0;
}

施加在基本类型上的限定符

  • short 和 long 用来限定 int 数据类型

    1
    2
    3
    4
    5
    6
    7
    // short 限定符尽可能的使 int 变短
    // short 和 int 型不小于 16 位,int 型可以是 16 位和 32 位
    short int a;

    // long 限定符尽可能的使 int 变长
    // long 类型不小于 32 位
    long int a;
  • signed 和 unsigned 用来限定 char 型和所有整型(包括被 short/long 限定过的整型)

    • signed 整型 等价于整型
    • unsigned 整型 使原有整形长度不变,符号位变成了数据位,仅能表示 0 和正数
    • signed char 强制 char 可以存储有符号整数
    • unsigned char 强制 char 可以存储无符号整数

常量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int a;
int b;
int c;
a = 1;
b = 1;
c = a + b;

c = a + 10; // 常量 int 型
c = a + 10L; // 常量 long 型
c = a + 10.0; // 常量 double 型
c = a + 10.0f; // 常量 float 型

// 用不同进制表示常量
c = a + 31;
c = a + 031; // 0 开头表示八进制
c = a + 0x1f; // 0x 开头表示十六进制
// 均表示 31

字符常量

需要用单引号将字符括起来:c = a + '0'; (0 的 ASCII 码对应 48)
字符常量也可以参与运算,实际是其对应的 ASCII 码参与运算

转义字符

1
2
3
4
5
6
7
\a 响铃符       \\ 反斜杠
\b 回退符 \? 问号
\f 换页符 \' 单引号
\n 换行符 \" 双引号
\r 回车符 \ooo 八进制数
\t 横向制表符 \xhh 十六进制数
\v 纵向制表符 \0字符串结束的标识

字符串常量

用双引号包裹起来的 >= 0 个的字符组成的序列

  • 字符中的 " 用转义符 \" 来表示
  • 多个字符串可连接 "I am a" "string"

运算符

普通运算符

+ - x / %

  • %: 表示除法运算的余数部分。x % y,x 和 y必须是整型操作数
  • /: 整数除法会截断结果中的小数部分。5 / 2 => 2
  • ++: x++ 先返回 x 的值,再让 x 增加;++x 先递增 x,再返回 x 的值

关系运算符

1
2
3
4
5
6
x>y
x<y
x>=y
x<=y
x==y
x!=y

逻辑运算符

1
2
3
&& // 与
|| // 或
! // 非

赋值运算符

1
2
3
4
5
6
=
+=
-=
x=
/=
%=

位运算符

1
2
3
4
5
6
& // 按位与
| // 按位或
<< // 左移一位
>> // 右移一位
~ // 按位取反
^ // 按位异或

其他运算符

1
2
3
4
sizeof(数据类型、变量或常量);

// 问号表达式
<表达式1> ? <表达式2> : <表达式3>

类型转换

自动转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 赋值语句
float a = 100;
int b = a; // float 自动转换为 int

// 混合运算
1 + 1.1


// 自动转换优先级别从上往下
short char
↘↙
int

unsigned int
↙ ↘
float long
↘↙
double

强制转换

(类型名)表达式 将表达式返回值转为括号内指定的类型

1
2
3
(float)a; // 将变量 a 转换为 float 类型
(int)(c + d); // 将表达式 c+d 的结果转换为 int 型
(float)5; // 将数值 5(默认为 int)转换为 float 型