您的位置:首页 > 编程语言 > C语言/C++

C++ Primer Plus : 3-处理数据

2017-02-22 18:07 387 查看
1. 超越整型限制的数据

C++不保证符号整型超越限制(上溢和下溢)时不出错

//short范围:-32768~32767
//unsigned short范围:0~65535
#include <iostream>
using namespace std;

int main()
{
short i = 32767;
unsigned short j = 0;
cout << "1:" << i << endl;  //1:32767
cout << "1:" << j << endl;  //1:0
i += 1;
j -= 1;
cout << "2:" << i << endl;  //2:-32768
cout << "2:" << j << endl;  //2:65535
return 0;
}


2.

#include <iostream>
using namespace std;

int main()
{
char ch = 'M';
int i = ch;
cout << "1:" << ch << " is " << i << endl;  //1:M is 77
ch += 1;
i = ch;
cout << "2:" << ch << " is " << i << endl;  //2:N is 78
cout.put(ch);  //N!
cout.put('!');
cout << endl;
return 0;
}


3.

#include <iostream>
using namespace std;
int main()
{
cout << "\a这是一个 \"有趣的\" 测试!\n";
cout << "Enter your agent code:________\b\b\b\b\b\b\b\b";
long code;
cin >> code;
cout << "\aYou entered " << code << "...\n";
return 0;
}
/***运行程序,将在屏幕上打印如下字符***/
//这是一个 "有趣的" 测试!
//Enter your agent code:________
/***打印下划线字符后,程序继续运行***/
//这是一个 "有趣的" 测试!
//Enter your agent code:12345678
//You entered 12345678...


C++转义字符:

\n:换行符

\t:水平制表符

\v:垂直制表符

\b:退格

\r:回车

\a:振铃

\:反斜杠

\?:问号

\’:单引号

\”:双引号

4. d.dddE+n指的是将小数点向右移n位,而d.dddE-n指的是将小数点向左移n位。

5.

#include <iostream>
using namespace std;

int main()
{
float a = 2.34E+22f;
float b = a + 1.0f;

cout << "a = " << a <<endl;
cout << "b - a = " << b - a << endl;
return 0;
}
/*** 输出结果 ***/
//a = 2.34e+022
//b - a = 0


改成主序将数字加1,然后减去原来的数字,结果应该为1。问题在于,2.34E+22是一个小数点做点有23位的数字。加上1,就是在第23位加1.但float类型只能表示数字中的前6位或前7位,因此修改第23位不会对这个值有影响。

7.

//ios_base::fixed是设置cout为定点输出格式
//ios_base::floatfield是设置输出时按浮点格式,小数点后有6位数字
#include <iostream>
using namespace std;

int main()
{
float a, b;
cout.setf(ios_base::fixed, ios_base::floatfield);
cout << "Enter a number:";
cin >> a;
cout << "Enter another number:";
cin >> b;

cout << "a = " << a <<"; b = " << b << endl;
cout << "a + b = " << a + b << endl;
cout << "a - b = " << a - b << endl;
cout << "a * b = " << a * b << endl;
cout << "a / b = " << a / b << endl;
return 0;
}
/*** 输出结果 ***/
//Enter a number:12.34
//Enter another number:56.78
//a = 12.340000; b = 56.779999
//a + b = 69.119995
//a - b = -44.439999
//a * b = 700.665222
//a / b = 0.217330


输出的结果中出现了不对等的情况,这是因为float类型表示有限位数的能力有限。C++中,float只保证6位有效位。如果需要更高的精度,可以使用double或long double。

8. 强制类型转换

通用格式:

(typename)value  //C
typename(value)  //C++


C++四种强制类型转换运算符:

1、dynamic_cast运算符

该转换符用于将一个指向派生类的基类指针或引用转换为派生类的指针或引用

dynamic_cast转换符只能用于含有虚函数的类,其表达式为 dynamic_cast<类型>(表达式)

dynamic_cast转换后的结果是一个指向派生类的指针,所以可以这样访问派生类中特有的成员。但是该语句不影响原来的指针的类型,即基类指针pb仍然是指向基类B的。如果单独使用该指针仍然不能访问派生类中特有的成员。

dynamic_cast转换符只能用于指针或者引用。dynamic_cast转换符只能用于含有虚函数的类。dynamic_cast转换操作符在执行类型转换时首先将检查能否成功转换,如果能成功转换则转换之,如果转换失败,如果是指针则反回一个0值,如果是转换的是引用,则抛出一个bad_cast异常,所以在使用dynamic_cast转换之间应使用if语句对其转换成功与否进行测试

2、const_cast操作符

表达式为 const_cast<类型>(表达式)

其中类型指要把表达式转换为的目标类型。该操作符用于改变const和volatile,const_cast最常用的用途就是删除const属性,如果某个变量在大多数时候是常量,而在某个时候又是需要修改的,这时就可以使用const_cast操作符了。

const_cast操作符不能改变类型的其他方面,只能改变const或volatile,即const_cast不能把int改变为double,但可以把const int改变为int。const_cast只能用于指针或引用。

3、static_cast操作符

该操作符用于非多态类型的转换,任何标准转换都可以使用他,即static_cast可以把int转换为double,但不能把两个不相关的类对象进行转换,比如类A不能转换为一个不相关的类B类型。

4、reinterpret_cast操作符

用于将一种类型转换为另一种不同的类型,比如可以把一个整型转换为一个指针,或把一个指针转换为一个整型。

aa28
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++