C++_系列自学课程_第_3_课_变量和基本类型_《C++ Primer 第四版》

  最近复习C++相关内容,决定在这里记录自己复习的过程。 以前写过部分文字,但是没有坚持连续写,因此学完后

基本又忘光啦,主要是没有实践,这一次决定自学完后,在这里在复习一遍增强自己的记忆和理解程度。

一、基本内置类型

  C++语言内置了一些数据类型,主要有两大类: 整型和浮点型。

整型又有:  bool型、char型、wchar_t型、short型,int型,long int型。

浮点型有: float型, double型、long double型(扩展双精度型)。

  我们知道不同的数据类型决定了不同的内存占用bit和可以进行的操作。

1、bool型

  bool型是C++语言扩展的类型,在C语言里面是没有bool类型的,其取值为两个值: false 和 true。

值得注意的是:bool类型的两个取值都是用小写的字母表示的,这一点需要注意。

  在C++中如果一个bool型的对象取值为 false,就表示逻辑结果为假; 如果bool型对象的取值为true

就表示逻辑结果为真。

Exp:

bool  bVar;
bVar = false;

if(bVar)
{
    std::cout<<"It is true"<<std::endl;
}
else
{
    std::cout<<"It is false"<<std::endl;
}

  这样就会执行 else分支的语句,输出: It is false。

  C++继承了C语言的特性: 如果一个表达式的值为零,则逻辑结果为假; 如果一个表达式的值非零,则逻辑结果

为真。

要点1:  在C++中有些表达式其逻辑结果可能不是那么容易判定为0还是非0, 这样就很难判定其逻辑结果的真假,

需要引起注意。

  例如:  std::cin<<x;   如果输入流读到文件的结尾,那么返回逻辑结果就为假, 如果还没有读到文件的结尾,那么

其返回结果就为真。

  要点2: bool类型变量在内存中需要1个字节表示。

  bool型变量可以进行与、或、非的逻辑运算,这些在运算符的时候讨论。

2、字符型

  C++提供两种不同位宽的字符型类型:char、wchar_t

  char型占用8bit, wchar_t占用16bit(用于表示宽字符集的字符)。

  char型字符字面值是用单引号引起来的字符,如:

       ‘A‘,  ‘b‘, ‘"‘(双引号)。

  wchar_t型字符字面值也是用单引号引起来的字符,但是需要在前面加上字幕L, 如:

      L‘B‘,   L‘C‘, L‘b‘,  L‘"‘(双引号)。

  C++和C语言一样提供了一些其他的方式来表示字符字面值。 主要有三种方式: 利用8进制的数字来表示

字符字面值、利用16进制的数字表示字符字面值、转义字符序列。

  A: 8进制表示字符字面值

  用反斜杠后面跟上8进制数字表示字符字面值, 如

    \7   响铃符   、  \12  换行符 、  \40 空格符等

  B:16进制表示字符字面值

  反斜杠后面跟上x或者X,然后在跟上16进制数字表示字符字面值, 如:

    \x7   响铃符、   \xC  换行符、   \x28 空格符等

  C:转义字符序列

  在C++语言中,有些字符具有特殊的意义,就不能用单引号来表示,例如不可打印字符、反斜杠、控制字符、

单引号、双引号、疑问号、换行符、水平制表符、垂直制表符、回车符、进纸符等。

  \n  换行符

  \t  水平制表符

   \t  垂直制表符

  \b  退格控制符

  \r  回车符

  \f      进纸符

  \a  报警符,响铃符

  \\  反斜杠

  \?  疑问符

  \‘  单引号

  \"  双引号

3、整数型

  short  int、 int、和 long int型 。其中short int 、long int 可以省略int,用 short 和long表示。

    short: 最小占用16bit

    int:最小占用16bit

    long:最小占用32bit

  这这三种类型占用的位宽由系统决定, 而且目前一般int是 32bit宽度, 因此在设计程序的时候,不能

假设占用的bit数,而要用sizeof 操作符来求解占用的位宽。

  整数型的字面值有三种表示方式: 十进制、八进制、十六进制。

  例如:    20           十进制

       024         八进制 ,前面用前导0开始表示这是一个八进制整数字面值

         0x14      十六进制,前面用前导0x或者0X开始表示这是一个十六进制整数字面值。

  整数型数有正数和负数之分;  能表示大于、小于和等于0的整数型称为有符号整型,用signed表示;

不能表示小于0的整数类型为无符号型(表示的数大于或者等于0),用unsigned表示。

  默认整数字面值是有符号的int型,   可以在整数字面值后面加上修饰的字符改变整数字面值的类型。

可以添加的修饰符有: u/U 、  l/L .  例如:

    20u:  无符号int型,

    20L: 有符号长整型

   20UL: 无符号长整型

要注意的是: 整数字面值没有short类型,这个需要注意。

4、字符串字面值

  连续的字符序列在C++中有一个叫法: 字符串字面值。 字符串字面值就是用双引号括起来的连续字符序列。

Exp:

  字符串:  "I am a C++ fresh man"

    上面就是一个字符串字面值。

  C++的字符串字面值继承了C语言的特性,会自动在字符串的字符序列后面加上一个 ‘\0‘ 的字符,因此在

内存中会多占用1个字节。

  对于wchar_t 类型的字符串字面值同样会占用对一个字符需要的空间,就是: 2byte。

   字符串中有一个特别需要注意的字符就是: %,这个字符需要引起大家的注意。

如果你是调用C语言的标准库printf()函数输出的话,那么在输出"%%" 时只会输

出一个 %; 而如果用cout的话,则会输出两个 %%。

  要点: 字符串字面值的连接,  两个以空格、制表符、换行符分隔的两个字符串字面值会连接成一个字符串字面值。

例如:

  std::cout<<"abcdefg"

        "12345678"

        "volcanol";

  这个输出就相当于:

    std::cout<<"abcdefg""12345678""volcanol";

  也相当于:

    std::cout<<"abcdefg12345678volcanol";

  这个是比较特殊的一个特性,在C语言中也可以这样,一般用的比较少。

5、浮点型

  浮点型有三种: float、double和long double。三种类型的区别是占用的有效位数不一样。

float       32bit, 有效位为6位小数

   double    64bit, 有效位为10位小数

   long        64bit, 最小有效位为10位小数

  浮点型字面值有两种表示方法: 十进制和科学计数法。

     1.     十进制的double型字面值

     1.e0  科学计数法的double型字面值。

  默认的浮点数字面值为double类型。如果要显示的设置为float型,就需要在字面值后面加上一个f或者F。

例如:

    3.14F,  2.f   都是float型的浮点型字面值。

  要点:  也许大家注意到了上面的1.  和 2.f   , 这里如果出现了小数点,即使后面没有小数那么也是浮点型

数据,这一点通常大家可能会遗忘。

  暂时说这么多,待续......

时间: 2024-10-14 18:59:23

C++_系列自学课程_第_3_课_变量和基本类型_《C++ Primer 第四版》的相关文章

C++_系列自学课程_第_7_课_数组_《C++ Primer 第四版》

说到数组,大家应该都很熟悉,在C.Pascal.Java等语言中,都有数组的概念.在C++中也提供了对数组的支持.数组简单来说就是一堆相同 数据类型对象的集合. 这里要把握住两个要点: 相同的数据类型.集合. 一.数组 1.定义 数组是由数组存储的对象的类型名.标识符和数组维数组成一种复合数据类型. 类型名规定了可以存储在数组中的对象的类型, 标识符用来标识 数组,用来在程序中引用数组元素, 维数用来规定数组可以存放多少数组元素. 数组的定义如下所示: 类型名 数组标识符[n]; 下面是一些数组

C++_系列自学课程_第_6_课_bitset集_《C++ Primer 第四版》

在C语言中要对一个整数的某一个位进行操作需要用到很多的技巧.这种情况在C++里面通过标准库提供的一个抽象数据类型 bitset得到了改善. 一.标准库bitset类型 1.bitset的作用 bitset可以看成bit的集合,可以单独的访问集合中的某一位,访问的结果可以作为逻辑的判断的条件.使用bitset的时候可以 不关心这些bit的存储方式,而通过bitset类型提供的一套接口进行操作. 和string和vector一样,要使用bitset类型,需要报备,如下所示: #include <bi

C++_系列自学课程_第_5_课_vector容器_《C++ Primer 第四版》

再一次遇到 vector 这个单词; 每一次见到这个单词都感觉这个单词非常的 "高大上"; 数字遇到vector马上就可以360度旋转: 当 "电" 遇到vector,马上让交流可以变得和直流一样进行控制(德国电气工程师的矢量控制理论,目前在工控界对电机控制应用 非常广泛,是变频器控制的基础理论,可惜的是中国目前没有这方面的真正的专家, 就是IT行业中的TI公司的TMS320LF24xx系列 DSP做的事,中国的基础理论的研究真的是落后于西方发达国家很多年),而在C

C++_系列自学课程_第_8_课_指针和引用_《C++ Primer 第四版》

C语言最富有迷幻色彩的部分当属指针部分,无论是指针的定义还是指针的意义都可算是C语言中最复杂的内容.指针不但提供给了程序员直接操作硬件部分的操作接口,还提供给了程序员更多灵活的用法.C++继承这一高效的机制,同时引入了另一个与指针相似但不相同的机制: 引用. 一.引用 简单的来说,引用就是变量的别名(alias), 通过别名我们可以操作引用代表的变量. 定义一个引用的语法如下所示: 变量类型   &引用标识符 = 变量名. Exp: int iVar=10; int &iRef = iVa

C++_系列自学课程_第_4_课_string_《C++ Primer 第四版》

相信学习过计算机编程的人,基本应该都接触过C语言,在C语言中处理字符串大家一定多遇到过, 也都知道处理字符串非常麻烦,而在C++里面,由标准库string类提供对可变长的字符串的支持.下面 来看看string类的特性. 1.使用的先决条件 在使用标准库之前必须包含相应的头文件, 要使用string类型,就需要包含相应的头文件,如下所示: #include <string> 在使用iostream的时候,我们未来引用iostream里面的类,前面需要加上  std::  来表示引用的是标准 IO

C++_系列自学课程_第_11_课_类型转换_《C++ Primer 第四版》

上次说了关于表达式的一些内容,说到还有一些关于数据类型转换的内容,今天我们接着八一八C++中的数据类型转换. 一.隐式类型转换 在表达式中,有些操作符可以对多种类型的操作数进行操作, 例如 + 操作符的操作数可以同时有int型,也可以有float型, 这就引入了一个问题到底应该由什么 决定表达式的值的类型. 例如: 3.1415926 + 5; //double类型 + 整型, 结果为什么类型呢?? 3.1415926 * 2 * 3 ; //double类型 * 整型 * 整型: 得到的表达式

C++_系列自学课程_第_10_课_表达式_《C++ Primer 第四版》

程序设计语言中大部分程序都在进行表达式的求值操作, 例如求两个数的和,求一个表达式的逻辑结果,或者通过输入输出表达式语句进行输入和输出. 这里我们对表达式进行讨论. 一.表达式 1.表达式 表达式由一个操作数或者多个操作数同操作符组合而成: 字面值是一个最简单的表达式.  表达式都会产生一个结果,如果表达式中没有操作符,则表达式 的值是操作数本身, 如果表达式中有操作符,则表达式的结果是操作符对操作数进行操作后的结果. 一般而言表达式的返回的是右值,不能给表达式赋值, 但可以获取表达式的值. E

C++_系列自学课程_第_12_课_语句_《C++ Primer 第四版》

前面的文章说完了表达式和类型转换的部分内容,在我参考的书里面,接下来讨论的是各种语句,包括:顺序语句.声明语句.复合语句(块语句).语句作用域 .if语句.while语句.for语句.do...while语句.break语句.continue语句.goto语句.try语句. 这里我们来讨论这些语句,为了方便讨论和记忆,我们可以将这些语句可以分为五大类:   简单语句.条件语句.循环语句.流程控制语句.异常处理.当然也可以 不这么分类,我这么说就是为了自己好理解和记忆. 一.简单语句 我将顺序语句

C++_系列自学课程_第_12_课_结构体

1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 struct CDAccount 7 { 8 double balance; //余额 9 double rate; //利息 10 int term; //存期 11 }; 12 13 struct Date 14 { 15 int year; 16 int month; 17 int day; 18 }; 19 20 struct Per