本文旨在记录在阅读《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 默认为intsize()返回类型为size_tunsigned 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》读书笔记之——处理数据的更多相关文章

  1. 《C++ Primer》读书笔记 第一章

    读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...

  2. C++ primer plus读书笔记——第3章 处理数据

    第3章 处理数据 1. C++对于变量名称的长度没有限制,ANSI C只保证名称中的前63个字符有意义(前63个字符相同的名称被认为是相同的,即使第64个字符不同). 2. 对类型名(int)使用si ...

  3. C++ Primer Plus读书笔记(二)处理数据

    1.格式化输出: 和C语言不太一样,C++格式化输出进制格式如下: 1 int a = 42; 2 int b = 42; 3 int c = 42; 4 5 cout << a < ...

  4. C primer plus 读书笔记第一章

    写在前面: 算法和数据结构是计算机学习的基础,而大部分书籍是用C/C++编写.所以有了把C语言重新学一遍的想法.这个系列主要是记录看C primer plus的一些笔记和部分课后习题的答案,不会总结的 ...

  5. 《C++ Primer》读书笔记—第二章 变量和基本类型

    声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.8比特的char类型计算机表示的实际范围是-12 ...

  6. 《C++ Primer》读书笔记—第一章 开始

    声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.一个函数的定义包含四个部分:返回类型(retur ...

  7. 《利用python进行数据分析》读书笔记--第九章 数据聚合与分组运算(一)

    http://www.cnblogs.com/batteryhp/p/5046450.html 对数据进行分组并对各组应用一个函数,是数据分析的重要环节.数据准备好之后,通常的任务就是计算分组统计或生 ...

  8. C++ Primer Plus读书笔记

    第五章 循环和关系表达式 1. 2.类别别名: (1)   #define FLOAT_POINTER float * FLOAT_POINTER pa, pb; 预处理器置换将该声明转换成  flo ...

  9. 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习

    下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...

随机推荐

  1. linux磁盘分区fdisk命令详解

    1.什么是分区?    分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁硬使用.分区表是一个硬盘分区的索引,分区的信息都会写进分区表.2.为什么要有多个分区? 防止数 ...

  2. vue与TypeScript集成配置最简教程

    https://blog.csdn.net/u014633852/article/details/73706459 https://segmentfault.com/a/119000001187808 ...

  3. C 标准库 - string.h之memchr使用

    memchr Locate character in block of memory,Searches within the first num bytes of the block of memor ...

  4. Git命令基本操作备忘

    创建Git仓库并上传到远程Git仓库 git init git config user.name "显示的名称" git config user.email "EMAIL ...

  5. Scrapy框架学习(一)Scrapy框架介绍

    Scrapy框架的架构图如上. Scrapy中的数据流由引擎控制,数据流的过程如下: 1.Engine打开一个网站,找到处理该网站的Spider,并向该Spider请求第一个要爬取得URL. 2.En ...

  6. android studio应用修改到android源码中作为内置应用

    1. 方法一:导入,编译(太麻烦,各种不兼容问题) android studio和eclipse的应用结构目录是不同的,但是在android源码中的应用基本上都是使用的eclipse目录结构(在/pa ...

  7. ORM框架SQLAlchemy的使用

    ORM和SQLAlchemy简介 对象关系映射(Object Relational Mapping,简称ORM),简单的来说,ORM是将数据库中的表与面向对象语言中的类建立了一种对应的关系.然后我们操 ...

  8. 记一次bug修复过程

    我的建议,究竟有谁会看,以我的位置,到底能推动到哪一层可行性,可能性 问题:用户的数据丢失了.以为是修改操作 有bug,但查看了后端接口和前端校验,都没有发现问题.但是input数据没有日志[日志级别 ...

  9. 原创经验:微信小程序开发总结

    学习时间不短了.今天公司不加班总结一下我的开发经验吧,以下都是我认为很重要的总结哦!写下来让我自己也记得更清楚,同时希望可以帮助到有需要的同学哦 一: 参数传值的方法 1:  data-id我们可以给 ...

  10. vue中echarts引入中国地图

    <div id="myChartChina" :style="{width: '100%', height: '500px'}"></div& ...