语言学习c++——内置基本类型

Posted SzxTNU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了语言学习c++——内置基本类型相关的知识,希望对你有一定的参考价值。

数据类型决定了程序中数据和操作的意义

内置基本类型

c++定义了一套包括算术类型(arithmetic type)和空类型(void)在内的基本数据类型。

  • 算数类型包括了字符型,整型数,布尔值和浮点数;

  • 空类型不对应具体的值,应用于一些特定的场合,最常见的类型是当函数不返回 任何值时,使用空类型作为返回类型

2.1.1算术类型

数据类型的几个要点
  1. 算数类型分为整型(integral type,包括字符和布尔类型在内)和浮点型

  2. 算术类型的尺寸,也就是该类型数据的bit数在不同的机器上有所差别。

  3. c++提供了几种字符类型,大多数支持国际化,基本的字符类型使char,一个char的空间应确保可以存放机器基本字符集中任意字符对应的数字值,也就是说,一个char的大小和一个机器字节一样

  4. 除字符和布尔类型之外,其他整型用于表示不同尺寸的整数。c++中规定,一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long 至少和一个long一样大。

内置类型的机器实现

大多数计算机以2的整数次幂个bit作为块来处理内存,可寻址的最小内存块成为“字节”(byte),存储的基本单元叫做字,字通常由几个字节组成。大多数机器中,一个字节由8个bit组成,字则有32bit或64bit构成,也就是4字节或8字节

带符号类型和无符号类型

除去布尔型和扩展的字符型之外,其他整型可以分为带符号的(signed)和不带符号的(unsigned)两种。带符号的能表示正数负数和0,而不带符号的只能表示大于0的数。在int、long、long long都是带符号的,在这些类型前面加上unsigned就可以变成无符号类型。   其中,unsigned int 可以简写为 unsigned

c++没有规定带符号类型应如何表示,但是约定了在表示范围内正值和负值的量应该平衡

选择数据类型的准则
  1. 明确知晓数值不可能为负的时候,应该选择无符号型

  2. 在实际运用中,long一般和int差不多大,所以超了int的范围之后,一般都选用long long

  3. 在算数表达式中,一般不用bool型和char型

  4. 执行浮点数运算的时候一般选用double,因为float的精度不够而且双精度和单精度的计算代价基本没啥区别

2.1.2类型转换

类型转化其实是一种运算。

❗注

  1. 当把一个非bool型的算数值赋给一个bool型的变量时,初始值为0则为false,否则为true;

  2. 当我们把一个bool型的赋值给非bool型,初始值为false则结果为0,初始值为true则结果为1;

  3. 当我们把一个浮点数赋给整数类型,结果只保留整数部分;

  4. 当我们把一个整数值赋给浮点数,小数部分记0。如果该整数所占的空间超过了浮点类型的容量,精度可能损失;

  5. 给无符号类型赋一个超过它范围的数,结果是初始值对无符号类型表示的数值总数mod之后的余数;

  6. 当我们赋给带符号类型一个超出他表示范围的值,结果是未定义的。

如果我们使用了一个非bool值作为i条件,那么它会被自动转换为bool值

含有无符号类型的表达式

当一个表达式中既有无符号数又有int类型的数字时,那个int值就会转换成无符号数。特别的,无符号数中-1代表整个无符号数代表的最大值。例如,int的范围是0-4294967295,那么-1就是4294967295.当从无符号数中减去一个值,不管这个值是不是无符号数,我们都必须确保结果不是负数。

无符号数不会小于0的事实关系到循环的写法,如果用无符号数来写循环的话,可能会导致死循环。

2.1.3 字面值常量

一个形如42的值被称作字面值常量,每个字面值常量都对应着一种数据类型,字面值常量的值和形式决定了他的数据类型。

整型和浮点数字面值

字面值通常指的是无需变量保存,可直接表示为一个具体的数字或字符串的值。

整型字面值可以写作十进制、十六进制、八进制。

20 (十进制)    024(八进制)    0x14(十六进制)

以0开头的代表8进制,以0x或0X开头的代表十六进制

整型字面值具体的数据类型由符号和值决定,十进制字面值通常是带符号数,八进制和十六进制不好说。

严格来说,十进制字面值不会是负数,如果发现了有个形如-42的字面值,那么那个负号并不在字面值之内,它的作用仅仅是对字面值取负值而已

字符和字符串字面值

由单引号括起来的一个字符成为char型字面值,双引号括起来的零个或多个字符则构成字符串型字面值

'a'        //字符字面值
"Hello World!"        //字符串字面值

字符串字面值的类型实际上是由常量字符构成的数组,由于末尾的反斜杠0,所以实际值比内容多1.

书写的字面值比较长的时候,可以采用分开书写的方式

转义序列

有两类字符程序员不能直接使用,一类是不可打印字符,如退格或其他控制字符,因为没有可视的图标;另一类是在C++中有特殊含义的字符,如单引号,双引号, 问号,反斜线。在这些情况下需要用到转义序列。

换行符 \n 横向制表符 \t 报警符 \a
纵向制表符 \v 退格符 \b 单引号 \'
回车符 \r 进纸符 \f

在程序中,这些转义序列被当作一个字符使用。

我们也可以使用泛化的转义序列,形式是\x后紧跟一个或多个十六进制数组,或者\后紧跟1个、2个或3个八进制数。数字部分表示的是字符对应的数值。其中,若\后跟的八进制数字多于三个,只有前三个数组与反斜杠构成转义序列

指定字面值的类型

通过添加前缀,后缀,可以改变整型、浮点型、字符型字面值的默认类型。

对于一个整型字面值来说,我们能分别指定它是否带符号以及占用多少空间,如果后缀中有U,则该字面值属于无符号类型。

布尔字面值和指针字面值

true 和false 是布尔类型的字面值

bullptr是指针字面值


以上是关于语言学习c++——内置基本类型的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 0x02 学习笔记

C++基本内置类型

C++程序设计学习-第2章

C++ Primer 学习笔记——第二章

C++类型转换基本语法

Python基本内置数据类型都有哪些