C与C++语言基础
一、类型
int a;
变量是装数据的容器,数据会变,容器不会变。
变量在使用前先定义,其定义格式:
变量类型名 变量名1,变量名2...;
int a = 0;//初始化
int b,c,d;
变量名:
- 是由字母和数字组成的序列,但第一个字符必须为字母;
- 大小写字母是有区别的;
- 关键字,已被语言本身占有,不能做为变量名。
C语言有且仅有的四种基本类型:
- int整型,用来装整数,长度由所在机器而定,通常占4各字节。
- char字符型,占用一个字节的长度,可以存放一个字符。
- float单精度浮点型,
- double双精度浮点型,
#include <iostream>
using namespace std;
int main() {
cout << sizeof(int) << std::endl;
return 0;
}
施加在基本类型上的限定符
short int a;// int可省略不写
long int b;// 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 + 13;
c = a + 013; // 0开头代表八进制
c = a + 0x13;// 0x开头代表十六进制
示例如下:
#include <iostream>
using namespace std;
int main() {
cout << 31 << endl;
cout << 037 << endl;
cout << 0x1f << endl;
return 0;
}
输出:
31
31
31
字符常量,需要用单引号将字符扩起来:
#include <iostream>
using namespace std;
int main() {
cout << 1+'0' << endl;
return 0;
}
输出:
49
字符常量也可以参与运算,实际是其对应的ASCII码参与运算。
字符串常量:
用双引号包裹起来的>=0个的字符组成的序列为字符串常量:
"我是一个字符串"
""
字符串中的"用转义字符"表示。
多个字符串可以拼接。
#include <iostream>
using namespace std;
int main() {
cout << "I am a string" << endl;
cout << "I am a" " string" << endl;
return 0;
}
输出结果为:
I am a string
I am a string
转义字符:
转义字符 | 含义 |
---|---|
\a | 响铃符 |
\ | 反斜杠 |
\b | 回退符 |
? | 问号 |
\f | 换页符 |
` | 单引号 |
\n | 换行符 |
" | 双引号 |
\r | 回车符 |
\ooo | 八进制数 |
\t | 横向制表符 |
\xhh | 十六进制数 |
\v | 纵向制表符 |
\0 | 字符串结束的标识 |
二、运算符
2.1、算数运算符
% + - * /
**% **
x % y结果是x除以y的余数部分。
x和y必须是整型操作数。
在有负操作数的情况下,取模运算结果的符号取决于具体机器的实现。
/
整数除法会截断结果中的小数部分。
++ 自增运算符
-- 自减运算符
#include <iostream>
using namespace std;
int main() {
float x = 1.1;
float y;
y = x++;
cout << x << endl;
cout << y << endl;
return 0;
}
输出结果:
2.1
1.1
#include <iostream>
using namespace std;
int main() {
float x = 1.1;
float y;
y = ++x;
cout << x << endl;
cout << y << endl;
return 0;
}
输出结果:
2.1
2.1
++x:先让x自增1,再返回x的值;
x++:先返回x的值,再让x自增1;
2.2、关系运算符
>、 <、>=、<=、==、!=
x > y : x大于y返回真,否则返回假。
在C语言中,0表示假,非0表示真。
#include <iostream>
using namespace std;
int main() {
int x = 1,y = 2,z;
z = x>y;
cout << z << endl;
z = x<y;
cout << z << endl;
return 0;
}
输出结果:
0
1
2.3、逻辑运算符
&&、 || 、 !
#include <iostream>
using namespace std;
int main() {
int x = 1,y = 0,z;
z = x&&y;
cout << z << endl;
y = 1;
z = x&&y;
cout << z << endl;
return 0;
}
输出结果:
0
1
2.4、赋值运算符
=、 += 、 -=、 *=、 /=、 %=
a += 10;
等价于:a = a+10;
2.5、位运算符
& 按位与、 | 按位或、 << 左移、 >> 右移、 ~ 按位取反、 ^ 按位异或
左移操作
#include <iostream>
using namespace std;
int main() {
short int x = -178;
short int y = x<<1;
cout << bitset<sizeof(x)*8>(x) << endl;
cout << bitset<sizeof(y)*8>(y) << endl;
return 0;
}
输出结果:
1111111101001110
1111111010011100
按位取返:
#include <iostream>
using namespace std;
int main() {
short int x = -178;
short int y = ~x;
cout << bitset<sizeof(x)*8>(x) << endl;
cout << bitset<sizeof(y)*8>(y) << endl;
return 0;
}
输出结果:
1111111101001110
0000000010110001
按位异或:
#include <iostream>
using namespace std;
int main() {
short int x = -111;
short int y = 234;
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;
}
输出结果:
1111111110010001
0000000011101010
1111111101111011
2.6、其他运算符
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;
}
输出结果:
B
A
表达式1为真,则返回表达式2,否则返回表达式3。
2.7、类型转换
1、自动转换
赋值语句中的自动转换:
#include <iostream>
using namespace std;
int main() {
float a = 100.5;
int b = a;
cout << b << endl;
return 0;
}
输出结果:
100
混合运算中的自动转换:
#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;
return 0;
}
输出结果:
2
4
4
8
数据位少的向数据位多的转换。

2、强制转换
(类型名)表达式
(float)a; // 将变量a转换为float类型。
(int)(c+d); // 将表达式c+d的结果转换成int型。
注意:
类型转换只体现在结果上,并不会改变被转换变量的类型。
学海无涯苦作舟
个人博客:http://www.coderlearning.cn/
