1.C++的四种初始化方式
int a = { 9 };
int b{ 8 };
int c{1};
int d(2)
//c++的三种初始化方式
2.C++的上溢和下溢(附运行结果)
//上溢
short a = SHRT_MAX;
unsigned short b = a;
cout << "初始: a = " << a << "\tb = " << b << endl;
a++;
b++;
cout << "末态: a = " << a << "\tb = " << b << endl;
//下溢
a = b = 0;
cout << "初始: a = " << a << "\tb = " << b << endl;
a--;
b--;
cout << "末态: a = " << a << "\tb = " << b << endl;
3.不同进制的赋值和输出
int a= 056; //decimal
int b = 56; //octal
int c = 0x56; //hexadecimal
//c++默认以十进制打印
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl << endl;
//以指定格式打印
cout << oct;
cout << "a = " << a << endl;
cout << hex;
cout << "c = " << c << endl;
注:标识符hex,oct位于名称空间std中。
4.char类型
char a;
cout << "请输入a的值:" << endl;
cin >> a;
cout << "a = "<<a << endl;
int i = a;
cout << "i = " << i << endl;
a++;
i = a;
cout << "a = " << a << endl;
cout << "i = " << i << endl;
//用cout.put()函数
cout.put(a);
cout << endl;
cout.put(i);
cout << endl;
//这条语句不像书中说的将打印字符的ASCII码,而仍然打印字符
cout << 'P' << endl;
//这条语句将打印字符
cout.put('P');
注:char也有分 signed char 和 unsigned char
5.转义序列
//下面这条语句展示c++的三种换行方法
cout << "a" << '\n'<<"b" << "\n"<<"c"<<"\n"<<"d"<<endl;
// \b和\v,\a的使用
char name[10], code[10];
cout << "请输入用户名_____" << "\b\b\b\b";
cin >> name;
cin.get();
cout << "用户:" << name << endl;
cout << "请输入密码:\v";
cin >> code;
cout << "密码: " << code << "\a"<<endl;
注:本系统将\v打印成…,呃…不知道怎么形容这个符号
6.通用字符名
用法类似于转移序列,以\u和\U打头,前者后面跟8个十六进制位,后者后面跟16个十六进制位
7.wcha_t(宽字符类型)
wcha_t是一种整数类型,有足够的空间,可以表示系统使用的最大扩展字符集
cin和cout将输入和输出看做插入流,因此不适合处理该类型。可以用中的wcin和wcout,通过加前缀L来只是宽字符常量和宽字符串。
wchar_t bob = L'p';
wcout << L"tall" << "do" << endl;
wcout << bob << endl;
8.char16_t 和 char32_t
两者都是无符号的。前者前缀为u,长16位,与\u00F6的通用字符名匹配。后者长32位,前缀为U,与\U0000222B通用字符名匹配。
char16_t ch1 = u'q';
//char32_t ch2 = U'tencent';//会报错
//char32_t ch4 = U'\Utencent';//也会报错
char32_t ch2 = U't';
char32_t ch3 = U'\U000022BB';
cout << ch1 << endl << ch2 << endl<< ch3 << endl;
cout.put(ch1);
cout << endl;
cout.put(ch3);
9.bool类型,const限定符号
bool t = 100;
bool s = 0;
const int a = 6; //固定格式,当然datatype可以变,若不赋值会报错
cout << t << "\t" << s << endl;
cout << a << endl;
注:使用const限定符的好处
1.相比#define可以明确指定类型
2.可以用c++的作用域规则将定义限制在特定的函数或者文件中
3.可以将const用于更复杂的类型,如数组、结构。
10.浮点类型(float,double,long double)
(1)表示方法有两个,标准小数点表示法和E(e)表示法。注意E(e)表示法数字中不允许有空格,可选加正负号,小数点可选,指数可正可负。
(2)注意float 和 double 的有效为(精确度),改变有效位之后的某个位上的数对输出的值没有影响。
cout.setf(ios_base::fixed, ios_base::floatfield);
//迫使输出使用小数点表示法,以便更好地了解精度。
float tub = 10.0 / 3.0;
double mint = 10.0 / 3.0;
const float million = 1.0E6;
cout << "tub = " << tub << endl;
cout << "mint = " << mint << endl;
cout << "一百万乘tub = " << million * tub << endl;
cout << "一百亿乘mint = " << million * mint*10000 << endl;
结论:本系统中float 的精度为7,double的精度为16.
(3)后缀f,l,F,L. 对“修改值而不影响输出的测试”
float a = 2.34E+22f;
float b = a + 1.0f;
cout << "a = " << a<<endl;
cout << "b - a = " << b - a << endl;
cout << "b = " << b << endl;
10.类型转换
(1)自动类型转换
c++执行的三种自动类型抓换:赋值中,表达式计算,以及向函数传递参数中的类型转换。例如:
#include<climits>
#include<iostream>
using namespace std;
void PRINT(int a, double b);
int main(void)
{
cout.setf(ios_base::fixed, ios_base::floatfield);
int a{ 4 };
int b{ 2 };
PRINT(a, b);
return 0;
}
void PRINT(int a, double b)
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "a + b = " << a + b << endl;
}
程序将打印:
注:①表达式计算和初始化赋值中的类型转换要注意一些潜在的问题(p63)和规则(p64)
②{}(列表初始化)不允许缩窄
(2)强制类型转换
①c++格式: typename(value)
②c格式:(typename)value
③特点:不改变原变量的值,而是创建一个新的、指定类型的值
④static_cast格式的强制类型转换
下面是对强制类型转换的运行测试:
int cat, dog, mouse;
cat = 23.6 + 9.7;//c++先把两个数相加的结果赋给cat,再截短为整型;
dog = int(23.6) + int(9.7); //c++风格
mouse = (int)23.6 + (int)9.7;//c风格
cout << "cat = " << cat << endl;
cout << "dog = " << dog << endl;
cout << "mouse = " << mouse << endl;
char ch = 'A';
cout << ch << "的编码为:" << static_cast<int>(ch) << endl;
cout << ch << endl;