类型
变量
- 变量是装数据的容器,数据变,容器不变。
- 变量在使用前要先定义,基本格式为:变量类型名 变量名1,变量名2…;,例如定义a,b,c三个变量:int a,b,c;
int a = 0,b,c = 0;//初始化
变量名
- 是由字母('_'被看作字母)和数字组成的序列,但第一个字符必须为字母
- 大小写字母是区分的
- 如int等关键字,已被语言本身占有,不能作为变量名
基本类型
C语言有且仅有的四种基本类型
char 字符型,占用一个字节的长度,可以存放一个字符;
int 整型,用来装整数,长度由所在机器而定,通常占4个字节;
float 单精度浮点型
double 双精度浮点型
测试代码
#include <iostream>
using namespace std;
int main()
{
cout << sizeof(char) << endl;
cout << sizeof(int) << endl;
cout << sizeof(float) << endl;
cout << sizeof(double) << endl;
return 0;
}
施加在基本类型上的限定符
short int a;//int可省略不写
long int a;//int可省略不写
- short限定符尽可能的使int变短,long尽可能的使int变长
- short和int类型不小于16位,int型可以是16位和32位,long类型不小于32位,具体由所在机器而定。
- signed和unsigned可用来限定char型和所有整型(包括被short或long限定过的整型)。
- signed整型等价于整型。
- unsigned整型使得原有整型长度不变,符号位变成了数据位,仅能表示0和正数。
- signed char强制char可以存储符号整数,unsigned char强制char可以存储无符号整数,char不加任何限定,则是否有符号根据所在机器而定。
常量
c = a + 10; //10常量,int型
c = a + 10L; //常量,long型(也可以加l后缀)
c = a + 10.0; //常量,double型
c = a + 10.0f; //常量,float型(也可以加F后缀)
测试代码
#include <iostream>
using namespace std;
int main()
{
cout << sizeof(10.0) << endl;
cout << sizeof(10.0f) << endl;
return 0;
}
整数常量还可以用八进制或者是十六进制表示
c = a + 31;
c = a + 037; //0开头代表八进制
c = a + 0x1f; //0x开头表示十六进制
测试代码
#include <iostream>
using namespace std;
int main()
{
cout << 31 << endl;
cout << 037 << endl;
cout << 0x1f << endl;
return 0;
}
字符常量,需要用单引号将字符括起来
c = a + ‘0’;
字符常量也可以参与运算,实际是其对应的ASCII码参与运算。
测试代码
#include <iostream>
using namespace std;
int main()
{
cout << 1 + '0' << endl;
return 0;
}
转义字符
符号 | 意思 |
---|---|
\a | 响铃符 |
\b | 回退符 |
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | 横向制表符 |
\v | 纵向制表符 |
\\ | 反斜杠 |
\? | 问号 |
\’ | 单引号 |
\" | 双引号 |
\ooo | 八进制数 |
\xhh | 十六进制数 |
\0 | 字符串结束的标识 |
字符常量
用双引号包裹起来的>=0个的字符组成的序列为字符串常量
“I am a string” “”
字符串中的"用转义字符"表示
多个字符串可链接,如"I am a string"等价于"I am a " “string”
测试代码
#include <iostream>
using namespace std;
int main()
{
cout << "I am a string" << endl;
cout << "I am a " "string" << endl;
return 0;
}
运算符与表达式
算术运算符
+、-、*、/、%
%:x%y结果是x除以y的余数部分
x和y必须是整型操作数,在有负操作数的情况下,取模运算结果的符号取决于具体机器的实现。
/:整数除法会阶段结果中的小数部分。
测试代码
#include <iostream>
using namespace std;
int main()
{
cout << 5 / 2 << endl;
return 0;
}
++ - -
以++为例,x++、++x
#include <iostream>
using namespace std;
int main()
{
float x = 1.1;
float y;
y = x++;
cout << x << endl;
cout << y << endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
float x = 1.1;
float y;
y = ++x;
cout << x << endl;
cout << y << endl;
return 0;
}
关系运算符
x > y: x大于y返回真,否则返回假
x < y: x小于y返回真,否则返回假
x >= y: x不小于y返回真,否则返回假
x <= y: x大于y返回真,否则返回假
x == y: x等于y返回真,否则返回假
x != y: x不等于y返回真,否则返回假
#include <iostream>
using namespace std;
int main()
{
int x = 1, y = 2;
int z = x > y;
cout << z << endl;
z = y > x;
cout << z << endl;
return 0;
}
逻辑运算符
&&(且) ||(或) !(非)
测试代码
#include <iostream>
using namespace std;
int main()
{
int x = 1, y = 0, z = 1;
int m = x && y;
cout << m << endl;
int n = x && z;
cout << n << endl;
int p = x || y;
cout << p << endl;
return 0;
}
赋值运算符
=
+=
-=
*=
/=
%=
a += 10;等价于a = a + 10
位运算符
&(按位与)
|(按位或)
<<(算数左移)
>>(算数右移)
~(按位取反)
^(按位异或)
bitse<转换后的位数>(被转换成2进制的数)
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
short int x = -111;
short int y = 1234;
short int z = x & y;
cout << bitset<sizeof(x) * 8>(x) << endl;
cout << bitset<sizeof(y) * 8>(y) << endl;
cout << bitset<sizeof(z) * 8>(z) << endl;
return 0;
}
其他运算符
sizeof运算符
用法:sizeof(数据类型、变量或常量)
问号运算符
<表达式1>?<表达式2>:<表达式3>
测试代码
#include <iostream>
using namespace std;
int main()
{
int x = 1;
int y = 2;
cout << (x > y ? 'A' : 'B') << endl;
x = 2;
y = 1;
cout << (x > y ? 'A' : 'B') << endl;
return 0;
}
类型转换
自动转换
赋值语句中的自动转换
从“float”转换到“int”,可能丢失数据
混合运算中的自动转换
测试代码
#include <iostream>
using namespace std;
int main()
{
short int a = 1;
int b = 1;
float c = 1.0;
double d = 1.1;
cout << sizeof(a) << endl;
cout << sizeof(a+b) << endl;
cout << sizeof(a+b+c) << endl;
cout << sizeof(a+b+c+d) << endl;
unsigned int m = 1;
int n = -2;
cout << m + n << endl;
return 0;
}
强制转换
(类型名)表达式
(float)a;//把变量a转换成float类型
(int)(c+d);//把表达式c+d的结果转换成int型
(float)5;//把数值5(默认为int型)转换成float型
注:类型转换只体现在结果上,并不会改变被转移变量的类型。