C++之前随笔-入门与基本内置类型

 

  • 本系列文章由 Shark-Pem 原创编写,转载请说明出处。
  • 作者:Shark-Pem  邮箱:sharkpem@gmail.com

 


 

关于变量跟基本类型,市面上各类编程书籍已经说的很详细了。像变量的类型,各种类型的取值范围,常量等等。如果您已经学习过C语言,并且已经基本掌握这些数据类型的用法,那么就很适合阅读《C++ Primer》这本书来学习C++这么语言。不过在此之前,还是建议先看看一些简单的C++教程书籍,再来啃这本书,或许会容易一点。

好的,咱们闲话少说,进入正题。

 

(一)数据的基本类型

一般分为以下几种:

  • 布尔类型:bool
  • 字符类型:char
  • 整数类型:int,short,long,long long
  • 浮点类型:float,double

还有一些其他类型,比如wchat_t,long double等等,因为使用频率不高,在此不提及。(补充:char32_t为Unicode字符集服务,如需了解,可参考P32)

关于这些类型的字长,含义等基础定义,默认读者已经学习过C语言关于此类的章节,也在此不再赘述。

 

 (二)关于带符号与无符号类型

除去bool类型和扩展的char字符类型之外,其他整型可分为带符号和无符号:

  • int,short,long,long long
  • char

以上两种都分为带符号和无符号,有无符号最大的区别就是:

  • 带符号能够取正数,负数,0
  • 无符号仅能取正数,0(表达形式为:unsigned  xxx)

在这里提供了两个可以学习的点:

  • unsigned int,也可缩写为 unsigned 代表 无符号int
  • char,signed char,unsigned char,在这里注意:char跟signed char并不一样。char会随机变为上述两种情况之一,具体由编译器决定。

关于取值范围等基础问题,读者可从《计算机组成原理》等课程中了解更多详情。原反补码在此文章中也就不提及。

 

 (三)如何选择类型【重点】

  • 当数值绝对不会为负,请选用:无符号类型(unsigned)
  • 整数运算时,请选用:int;如果需要长的数据,请选用:long long
  • 浮点运算时,请选用:double
  • 算术表达式中,请不要使用char或bool。只有在存放字符或者布尔值的时候选用。

 

 (四)类型的转换

关于取值范围等基础问题,读者可从《计算机组成原理》等课程中了解更多详情。原反补码在此文章中也就不提及。

主要记得以下几个关键的类型转换出现的情况:

  • 非bool 传给 bool :0为false,否则为true
  • bool 传给 非bool :false为0,true为1
  • 浮点 传给 整型 :保留小数点前的数值(注意精度损失)
  • 整型 传给 浮点 :小数点部分加0(注意精度损失)
  • 给 unsigned 赋超出范围的值:初始值+模得出来的余数(计算机组成原理中有这一部分知识,下面也会着重讲解)
  • 给 有符号 赋超出范围的值:结果是未定义的,造成的后果不可预计!!

这边给出一个很容易出错的,关于有无符号类型的代码:

    for (int i = 10; i >= 0; i--)
    {
        std::cout << "i=" << i << std::endl;
    }
    for (unsigned j = 10; j >= 0; j--)
    {
        std::cout << "j=" << j << std::endl;
    }

第一段代码很清楚的想表达:把 i从10到0依次输出 ,结果很明显:

但是第二段代码问题就很大了,这段代码本意也是依次输出,但是由于采用了无符号类型,出现了以下的问题:

 为什么会这样呢?具体原因还是出在,当最后一轮,i--得到的是-1,而j--因为是无符号类型,得到的是一个模,也就是4294967295,这个导致第二段代码只能陷入无限循环当中!

所以切记,一定要慎用无符号类型!!

关于如何改进,《C++ Primer》采用的是while提前减去值进行修改,而笔者依旧使用for改进了一下:

    for (unsigned j = 5; j >= 0; j--)
    {
        if (j > 5)
            break;
        std::cout << "j=" << j << std::endl;
    }

 

(五)字面值常量

留坑,再填。不填了。

 

 

以下使用Markdown语法重新写

 

* **作者:[@Nick-Pem](https://www.cnblogs.com/nickpem/)**
* **本文章由作者原创编写,转载请注明出处。**

&nbsp;

---
## 前言
关于本系列文章,17年的时候曾准备一段时间的《C++笔记》,个人感觉达不到复习的效果,加上最近也看了Markdown编辑器,随即决定全部重新开始写,并且命名为《C++快速入门指南》。希望可以指导刚入Cpp坑的新朋友!

**首先,本教程主要参考书籍有**
* 《Essential C++》
* 《C++ Primer》
* 《C++全方位学习》
> 《C++全方位学习》也叫《零起点学通C++》是国内一名作者(范磊老师)写的基础C++书籍,如果是真的零基础,连C语言都未曾学习过,建议可以看看这本。

下面就正式进入到我们的学习之路。

## 一、什么是C++
留坑

 

posted @ 2018-03-07 18:21  Shark-Pem  阅读(139)  评论(0)    收藏  举报