数据类型
- 整数型
short:16位 (2字节)
int:32位 (4字节)
long:一般占用4字节
longlong:一般占用8个字节
- 字符型
char:8位(1个字节)
- 浮点型
float类型通常占用4个字节,有效位数为6位
double类型占用的空间是float类型的两倍,即8个字节,有效位数为15位
long double类型一般占用16个字节的空间
如果是无符号版本,那么一个8位的内存块可以一一对应到0~255之间的整数;
如果是有符号版本,那么就会考虑负数,这个8位的内存块可以表示一128~127之间的整数。
32 位 的 i n t 类 型 , 可 以 表 示 2 32 = 42949672962 个 不 同 的 整 数 32 位的int类型,可以表示2^{32}=42949672962 个不同的整数 32位的int类型,可以表示232=42949672962个不同的整数
运算符
C++中共包含6种按位运算符:
按位与运算符 &
按位或运算符 |
异或运算符 ^(相同为0,不同为1)
按位取反运算符 ~
左移运算符 <<
右移运算符 >>
Tips:按 位运算符 只能对字符整型以及数值整型数据类型的常量或变量使用,不能对浮点类型数据进行计算。
EG: cout << "A | B = " << (A | B) << endl;(注意阴影部分)
移位优先级高于异或
#include <iostream>
using namespace std;
int main() {
int A = 60; // 0011 1100
int B = 13; // 0000 1101
cout << (A & B) << endl;
cout << (A | B) << endl;
cout << (A ^ B) << endl;
cout << (~A) << endl;
cout << (A << 1) << endl; // 左移1位
cout << (A >> 2) << endl; // 右移2位
return 0;
}
关系运算符
Tips: 判断两个数是否相等,用的是 == 非 =,因为=是用于赋值操作的。
- 浮点数 一般不会用 == 或者 != 来判断,因为可能产生表示误差。
- 比较两个 浮点数 是否相等,需要看两个数的差值是否小于一定的精度,比如:
- 对于浮点数a和b,如果(a - b) < 1e-6 如果值为真,就判断两个浮点数相等。
优先级
题型
Switch语句
语法解析
- switch 后面的变量名:整型变量(比如int或者char),或者值为整型的表达式
- 在一个switch中可以有任意数量的case语句。
- 每个case后跟一个变量可能的值和一个冒号。这个变量可能的值必须与switch中的变量具有相同的数据类型,而且是一个常量,比如1,2,3或者‘A’,‘B’,‘C’或者‘1’,‘2’,‘3’等等。
- 当switch后面的变量等于case后的常量时,case后跟的所有语句将被执行,直到遇到break语句为止。
break(难点):
当遇到 break 语句时,switch 终止,控制流将跳转到整个 switch 语句后的下一行。
case后可以没有break, 如果某个case后没有break语句,程序就会接着往下执行。
- 举个例子,假设 执行语句1之后没有 break,那么如果变量名变量可能的情况1时,程序会执行执行语句1,然后接着执行
执行语句2,直到碰到break。
default: 一个switch语句可以有一个可选的default情况,出现在switch的结尾。default情况可用于上面所有case都不为真时执行。
char opt;
cin >> opt;
switch (opt) {
// 如果opt=='6',执行完两句cout后,遇见break,就会跳出整个switch
case '6':
cout << "主人你好!" << endl;
cout << "今天你想吃什么" << endl;
break;
case '1':
cout << "小一你好!" << endl;
cout << "今天天气怎么样?" << endl;
break;
case '2':
cout << "你有什么需要帮助的吗?" << endl;
break;
// 如果opt=='4',由于'4'的 case 后面没有 break
// 所以会往下执行'5'的 case 后面的语句,直到遇到 break
case '4': case '5':
cout << "我不想跟你说话" << endl;
break;
default:
cout << "我不太清楚你是谁..." << endl;
}