《C++ Primer Plus》读书笔记之——处理数据
本文旨在记录在阅读《C++ Primer Plus》第五版的过程中,一些重点的知识点,方便以后查阅。本文将不断更新......
一、第三章 处理数据
1、无符号整型不能存储负数值,其优点是可以增大变量能够存储的最大值。例如short表示的范围是-32768-32767,则无符号版本的表示范围为0-65535;假设有一个short变量sam和一个unsigned short变量sue,分别设置为最大的short值,比如是32767,然后将两个变量都加1,这对于sue没有问题,但sam的值从32767变为-32768!同样,对于sam,将其值设置为0再减去1,也不会有问题;但对于sue,将其值设置为0将去1后,它变为65535!
需要注意:
string str = ""; if (- < str.size())
cout << "win\n";
else
cout << "lose\n";
你的答案是 win,是么?那么很遗憾的告诉你,NO,答案是;lose!!!
为何?其实很简单的问题,类型不一致。
-1 默认为int,size()返回类型为size_t即unsigned int。
size_t x = ;
int y = -;
cout << x + y << endl; // 0 (-1会变成nusigned int所能表示的最大整数,加上1之后,变成0)
cout << typeid(x+y).name() << endl; // unsigned int
两种类型进行操作,int 类型的 - 1 会被自动转为unsigned int,即:
(unsigned int) + - (int)
...(unsigned int) + ...(int)
= ...(unsigned int) + ...(unsigned int)
= ...(unsigned int)
显而易见,int 类型的 - 1 转为 unsigned int 后,会变成一个非常大的正数。
2、C++有11种整型和3种浮点类型,因此计算机会处理大量不同的情况,尤其是对不同的类型进行运算时。为处理这种潜在的混乱,C++自动执行很多类型转换:
①赋值时进行的转换:C++允许将一种类型的值赋给另一种类型的变量。这样做时,值将被转换为接收变量的类型。将一个值赋给取值范围更大的类型通常不会导致什么问题,但是相反,则可能会带来麻烦,比如降低精度等。
②表达式中的转换:当运算涉及到两种类型时,较小的类型将转换为较大的类型。例如:9.0/5,由于9.0的类型为double,因此程序在用5除之前,将5转化成double类型。
③传递参数时的转化:传递参数时的类型转化通常由C++函数原型控制。
④强制类型转化:C++允许通过强制类型转换机制显示地进行类型转换。强制类型转换的格式有两种:
(typeName) value C语言
typeName (value) C++语言,新格式的想法是,要让强制类型转换就像是函数调用。
《C++ Primer Plus》读书笔记之——处理数据的更多相关文章
- 《C++ Primer》读书笔记 第一章
读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...
- C++ primer plus读书笔记——第3章 处理数据
第3章 处理数据 1. C++对于变量名称的长度没有限制,ANSI C只保证名称中的前63个字符有意义(前63个字符相同的名称被认为是相同的,即使第64个字符不同). 2. 对类型名(int)使用si ...
- C++ Primer Plus读书笔记(二)处理数据
1.格式化输出: 和C语言不太一样,C++格式化输出进制格式如下: 1 int a = 42; 2 int b = 42; 3 int c = 42; 4 5 cout << a < ...
- C primer plus 读书笔记第一章
写在前面: 算法和数据结构是计算机学习的基础,而大部分书籍是用C/C++编写.所以有了把C语言重新学一遍的想法.这个系列主要是记录看C primer plus的一些笔记和部分课后习题的答案,不会总结的 ...
- 《C++ Primer》读书笔记—第二章 变量和基本类型
声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.8比特的char类型计算机表示的实际范围是-12 ...
- 《C++ Primer》读书笔记—第一章 开始
声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.一个函数的定义包含四个部分:返回类型(retur ...
- 《利用python进行数据分析》读书笔记--第九章 数据聚合与分组运算(一)
http://www.cnblogs.com/batteryhp/p/5046450.html 对数据进行分组并对各组应用一个函数,是数据分析的重要环节.数据准备好之后,通常的任务就是计算分组统计或生 ...
- C++ Primer Plus读书笔记
第五章 循环和关系表达式 1. 2.类别别名: (1) #define FLOAT_POINTER float * FLOAT_POINTER pa, pb; 预处理器置换将该声明转换成 flo ...
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
随机推荐
- 012-MD5Utils工具类模板
package ${enclosing_package}; import java.math.BigInteger; import java.security.MessageDigest; impor ...
- StringUtils 中 isEmpty 和 isBlank 的区别
在项目的工作学习中经常用到了 apache commons 中的 StringUtils 的 isBlank 和 isEmpty 来判断字符串是否为空,这个方法都是判断字符串是否为空做判断的,以至于 ...
- Linux定时增量更新文件--转
http://my.oschina.net/immk/blog/193926 动机与需求:现在有两台服务器A和B,由于A的存储随时会挂(某些原因),所以需要B机器上有A的备份,并且能够与A同步更新 一 ...
- Firebird 条件函数
1.iif IIF (<condition>, ResultT, ResultF) 示例: select iif( sex = 'M', 'Sir', 'Madam' ) from Cu ...
- sql语句将身份证号数字转换成特殊字符
SELECT Tname , STUFF(Idcard,,,'*********') as Idcard,Completion from demo
- 简单的js定时器
var flag = 0; var time = 0; var stoptime = setInterval(function(){ if (flag<9999999) { //执行定时器 } ...
- 详细解析 HTTP 与 HTTPS 的区别
详细解析 HTTP 与 HTTPS 的区别 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览 ...
- PHP DES解密 对应Java SHA1PRNG方式加密
背景及问题 背景:在和外部系统通过HTTP方式跳转时, 为保障传输参数安全性, 采用AES 加密参数. 关于对称加密中 AES, DES, CBC, ECB, PKCS5Padding 概念可参考ht ...
- js两个字符串明明一样却判断显示不相等
一.问题 两个字符串看起来一样.类型一样,判断str1==str2时返回false: 二.原因 字符串可能含有其他特殊字符:换行符(%D).空格(%20)...一般不显示. 三.如何判断 encode ...
- flask 继承模版的基本使用