今天看啥  ›  专栏  ›  Dragon_boy

《C++ Primer Plus》:处理数据

Dragon_boy  · 简书  ·  · 2020-07-15 23:23

本文同时发布在我的个人博客上: https://dragon_boy.gitee.io

内置的C++类型分两组:基本类型和复合类型。

简单变量

变量名

C++命名规则:

  • 在名称中只能使用字母字符、数字和下划线。
  • 名称的第一个字符不能是数字。
  • 区分大写字符与小写字符。
  • 不能将C++关键字用作名称。
  • 以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。
  • C++对于名称的长度没有限制。

整型

整数就是没有小数部分的数字。C++基本整型分别是char,short,int,long和long long。

整型short、int、long、long long

计算机内存是由一些叫做位的单元组成。C++的short、int、long、long long通过使用不同数目的位来存储值。C++有一种相关标准:

  • short至少16位。
  • int至少与short一样长。
  • long至少32位,且至少与int一样长。
  • long long至少64位,且至少与long一样长。

一个字节8位

sizeof运算符可以指出类型名的字节数。

无符号类型

无符号类型用unsigned修饰,unsigned本身是unsigned int的缩写。例如,short范围是-32768到32767,无符号版本是0-65535。如果某一类型的值超过了限制,其值将为范围另一端的取值。

整型字面值

C++有三种计数方式来书写整数。第一位为1-9则为十进制,第一位为0,第二位为1-7则为八进制,前两位为0x则为16进制。

C++如何确定常量类型

除非有理由存储为其它类型(如使用特殊的后缀来表示特定的类型,或者值太大,并不能存储为int),否则C++将整型常量存储为int类型。

后缀是放在数字常量后面的字母,用于表示类型。整数后的L或l表示为long,u或U表示为unsigned int,其它的以此类推。

char类型

char类型是一种整型,他足够长,能够表示目标计算机系统中的所有基本符号。除此类型外,C++还提供wcha_t,char16_t和char32_t等类型,长度更大。

bool类型

C++将非零值解释为true,将零解释为false。

字面值true和false都可以通过提升转换为int类型,true被转换为1,false被转换为0.另外,任何数字值或指针值都可以被隐式转换为bool值。

const限定符

const int Months = 12;

常量Months被初始化后,其值被固定了,编译器将不允许再修改该常量的值。

浮点数

浮点类型数字诸如3.14159等。

书写浮点数

C++有两种浮点数表示方法,第一种是常用标准小数点表示法:如12.34,3.14159等。

第二种是E表示法,En即 \times 10^n ,如2.52e+8,8.33E-4。

浮点类型

C++有三种浮点类型:float、double和long double。float至少32位,double至少48位,且不少于float,long double至少和double一样多。

浮点常量

默认情况下,8.24等浮点常量都是double类型,如果希望为float,则后缀f,long double则后缀l。

C++算数运算符

C++提供了几种基本运算符来完成5中基本的算术计算:加减乘除、求模。(+-*/%),%要求两个操作数为整型。

运算符优先级和结合性

先乘除后加减这不用说。

除法分支

如果除法的两个操作数都是整数,C++将执行整数除法,即结果小数部分被丢弃,如果有一个操作数是浮点值,则小数部分被保留。

类型转换

C++自动执行很多类型转换:

  • 将一种算数类型的值赋给另一种算数类型的变量时,C++将对值进行转换。
  • 表达式中包含不同的类型时,C++将对值进行转换。
  • 将参数传递给函数时,C++将对值进行转换。
初始化和赋值进行的转换

C++允许将一种类型的值赋给另一种类型的变量。这样做时,值将被转换为接受变量的类型,例如,假设so_long的类型为long,thirty的类型为short:

so_long = thirty;

进行赋值时,程序将thirty的值扩展为long,扩展后的值存储在so_long中,而thirty的内容不变。

将一个值赋给取值范围更大的类型通常不会导致什么问题,但反之就会出现精度问题。潜在的数值转换问题:

转换 潜在的问题
将较大的浮点类型转化为较小的浮点类型,如将double转换为float 精度降低,值可能超出目标类型的取值范围,在这种情况下,结果将是不确定的
将浮点类型转换为整型 小数部分丢失,原来的值可能超出目标类型的取值范围,在这种情况下,结果将是不确定的
将较大的整型转换为较小的整型,如将long转换为short 原来的值可能超出目标类型的取值范围,通常只复制右边的字节
表达式中的转换

当同一个表达式中包含两种不同的算数类型时,C++将执行两种自动转换:首先,一些类型在出现时便会自动转换;其次,有些类型在与其它类型同时在表达式中时将被转换。

先是自动转换,在计算表达式时,C++将bool、char、unsigned char、signed char和short值转换为int,true被转换为1,false被转换为0。这些转换被称为整型提升。

传递参数时的转换

传递参数时的类型转换通常由C++函数原型控制,然而,也可以取消原型对参数传递的控制。在这种情况下,C++将char和short类型应用整型提升。

强制类型转换

强制类型转换并不会改变值本身,而是会产生一个新的值,可以用在表达式中。通用格式:

(typeName) value
typeName (value)

auto声明

auto可以自动根据初始值的类型推断变量的类型。

总结

C++的基本类型分为两组:一组由存储为整数的值组成,另一组由存储为浮点格式的值组成。整型之间通过存储值时使用的内存量及有无符号来区分。整型从最小到最大依次是:bool、char、signed char、unsigned char、short、unsigned short、int、unsigned int、long、unsigned long以及long long、unsigned long long。还有wchar_t,C++11新增char16_t和char32_t。

字符通过其数值编码来实现。I/O系统决定了编码是被解释为字符还是数字。

浮点类型可以表示小数值以及比整型能够表示的值大得多的值。三种类型为float、double、long double。C++确保float不比double长,而double不比long double长。通常,float使用32位内存,double使用64位内存,long double使用80到128位。

通过提供各种长度不同、有符号或无符号的类型,C++使程序员能够根据特定的数据要求选择合适的类型。

C++使用运算符来提供对数字类型的算术运算:加减乘除和求模。当两个运算符对同一操作数进行操作时,C++的优先级和结合性规则可以确定先执行哪种操作。

对变量赋值、在运算中使用不同类型、使用强制转换时,C++将把值从一种类型转换位另一种类型。很多类型转换是安全的,但有些需要小心。




原文地址:访问原文地址
快照地址: 访问文章快照