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

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操作符
用于将一种类型转换为另一种不同的类型,比如可以把一个整型转换为一个指针,或把一个指针转换为一个整型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值