面向对象(OOP)的本质是设计并扩展自己的数据类型。设计自己的数据类型就是让类型与数据匹配。

如果正确做到这一点,就会发现以后使用数据会容易很多。然而创建自己的类型之前,必须了解并理解C++内置类型。这些类型是创建自己类型的基本组件。

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

基本类型:整数和浮点数

复合类型:数组、字符串、指针和结构

程序还需要一种标识存储的数据的方法——使用变量

如何在C++中进行算术运算

C++如何从一种类型转换到另一种类型。

========================================

简单变量

程序存储数据必须记录3个基本属性

信息将存储在哪里

要存储什么值

存储何种类型的信息

变量名

命名规则

两个下划线或下划线和字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。

命名风格

变量名前加上描述变量类型或内容的前缀。

整型

整数是没有小数部分的数字。

宽度(width)用于描述存储整数时使用的内存量。

整数类型按宽度递增:char、short、int、long和C++11新增的long long。其中每种类型都有有符号版本和无符号版本,因此总共有10种类型可供选择。

char类型有一些特殊属性,它最常用于表示字符,而不是数字。

整型short、int、long和long long

计算机内存由一些叫做(位)的单元组成。short、int、long和long long类型通过使用不同数目的位来存储值。在不同计算机这些类型的宽度不是固定的。C++提供了一种灵活的标准。

short至少16位

int至少与short一样长

long至少32位,且至少与int一样长

long long 至少64位,且至少与long一样长

计算机的基本内存单元为:位

字节通常指8位的内存单元。从这个意义上讲,字节指的是描述计算机内存量的度量单位。C++对字节的定义不同,C++字节至少能够容纳实现的基本字符集的相邻位组成。也就是其可能取值的数目必须等于或超过字符数目。例如ASCII字符集,它们都可以用8位来容纳。国际编程使用更大的字符集,如Unicode,因此有些实现可能使用16位或32位字节。有些人使用术语八位组来表示8位字节。

要知道系统中整数的长度,可以在程序中使用C++工具来检查类型的长度。

sizeof运算符返回类型或变量的长度。单位为字节。

运算符是内置的语言元素,对一个或多个数据进行运算,并生成一个值。

运算符sizeof和头文件climits

头文件climits定义了符号常量来表示类型的限制。

初始化

初始化将赋值和声明合并在一起。

如果不对函数内部定义的变量进行初始化,该变量的值将是不确定的。这意味着该变量的值将是它被创建之前,相应内存单元保存的值。

在声明时对变量进行初始化是个好习惯,可以避免以后忘记对它赋值的情况发生。

C++的初始化方式

还有另一种初始化方式,用于数组和结构。但在C++98中,也可用于单值变量。

大括号初始化器,不仅可以用于数组和结构,也可以用于单值,例如:

int enus{7} ; //不使用等号

int reheas = {12};

int rocs = { }  //大括号内不包含任何东西,在这种情况下,变量将被初始化为零

无符号类型

前面介绍的4种整型都有一种不能存储负数值的无符号变体。其优点是可以增大变量能够存储的最大值。

要创建无符号版本的基本整型,只需使用关键字unsigned来修改声明即可。

unsigned short change;

unsigned int revoer;

unsigned 本身是unsigned int的缩写

选择整型类型

int被设置为目标计算机而言最为“自然”的长度。

自然长度指的是计算机处理起来效率最高的长度。如果没有非常有说服力的理由来选择其他类型,则应使用int。

如果表示的值不可能为负,则可以使用无符号类型,这样变量可以表示更大的值。

整型字面值

整型字面值(常量)是显式地书写的常量。

C++能够以三种不同的计数方式来书写整数:基数为10,基数为8(老式UNIX版本),基数为16(硬件黑客的最爱)。

C++如何确定常量的类型

后缀:数字常量后面的字母,用于表示类型

例如整数后面的l和L后缀表示该整数位long常量。

U或u后缀表示unsigned int常量。

char类型:字符和小整数

char类型是专为存储字符而设计的。

存储字母:编程语言通过使用字母的数值编码解决了这个问题。

char类型是另一种整型,它能够表示目标计算机系统中的所有基本符号——字母、数字、标点符号。

最常用的符号集是ASCII字符集。字符集中的字符用数值编码(ASCII码)。

程序说明

char ch = ‘M’;

int I = ch;

cout.put(‘!’)

成员函数

成员函数归类所有,描述了操纵类数据的方法。

只能通过类的特定对象来使用成员函数。

必须使用句点将对象名和函数名称连接起来。

句点被称为成员运算符

cout.put()的意思是:通过类对象cout来使用成员函数put()

使用cout.put()函数有历史原因。早期的C++,cout将字符变量显示为字符,而将字符常量显示为数字。所以cout.put()能够正常显示字符常量。

后来cout可以正常处理字符常量了。

char字面值

‘A’ 即字符A的ASCII码

这种表示法由于数值编码,用户不需要知道编码方式。如果系统使用的是EBCDIC,则A的编码将不是65,但是‘A’表示的仍然是字符A。

C++提供了一种特殊表示方法——转义序列,来表示难以用键盘表示的特殊字符。

还可以基于字符的的八进制和十六进制编码来使用转义序列。

通用字符名

signed char和unsigned char

char作为数值类型,则unsigned char和signed char之间的差异将非常重要。unsigned char类型表示范围通常为0~255。signed char表示范围-128~127。

char来存储标准ASCII字符,则char有没有符号都没有关系。

wchar_t

8位char可以表示基本字符集

wchar_t可以表示扩展字符集(宽字符类型);wchar_t是一种整数类型,它有足够的空间,可以表示系统使用的最大扩展字符集。

cin和cout将输入和输出看成是char流。因此不适合用来处理wchar_t类型。Iostream头文件的最新版本提供了作用相似的工具——wcin和wcout,可用于处理wchar_t流。

另外可以使用前缀L来指示宽字符常量和宽字符串

wchar_t =L‘P’;

wcout << L”tall”<<endl;

此外还有char16_t和char32_t类型,这两种类型都是无符号整数类型。它们都有底层类型内置的int整型。

bool类型

C++标准添加了一种名叫bool的新类型。布尔变量的值可以是True或False。

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

现在可以用布尔类型来表示真假了,所以可以用字面值true来表示真,字面值false来表示假。

========================================

const限定符

C++有一种更好的处理符号常量的方法,使用const来修改变量声明和初始化。

const int Months =12;  //初始化之后就再也不能被修改了

Months初始化后,编译器将不允许再修改该常量的值了。Const相当告诉编译器,被它修饰的变量不能再被更改了。

========================================

浮点数

程序员只需要了解:浮点数能够表示小数、非常大和非常小的值。

它的内部表示方法和整数有天壤之别。

浮点类型

float、double、long double;

有3个

浮点常量

默认程序把浮点常量存储为double类型;

如果希望改成float类型,使用f或F后缀;

如果希望改成long double类型,使用l或L后缀;

浮点数的优缺点

浮点数有两大优点,首先它可以表示整数之间的值。其次,由于有缩放因子,它可以表示的范围大得多。另一方面,浮点运算符的速度通常比整数运算慢,而且精度也将降低。

整数和浮点类型都被称为算术类型。

========================================

C++算术运算符

C++使用运算符来运算;提供了几种运算符来完成5种基本的算术运算;

加法、减法、乘法、除法以及求模;

每种运算符:都使用两个值(操作数)来计算结果。

运算符和操作数构成了表达式

+ 加法

- 减法

* 乘法

/ 除法  得到模,19/6为3

% 取余  19%6为1

运算符的优先级和结合性

除法分支

除法的行为取决于操作数的类型。如果两个操作数都是整数,则C++将执行整数除法。这意味着结果的小数部分将被丢弃,使得最后一个结果为整数。如果其中有一个(或两个)操作数是浮点值,则小数部分将保留,结果为浮点数。

求模运算符

类型转换

要了解在哪些情况下会发生类型转换,类型转换的结果是什么。

将一种算术类型赋值给另一种算术类型的变量时,C++将对值进行转换;

表达式中包含不同的类型时,C++将对值进行转换;

将参数传递给函数时,C++将对值进行转换;

1、 初始化和赋值进行的转换

C++允许将一种类型的值赋值给另一种类型的变量。这样做,值将被转换为接受变量的类型。

2、 以{ }方式初始化时进行的转换(C++11)

3、 表达式中的转换

4、 传递参数时的转换

5、 强制类型转换

强制类型转换机制显式地进行类型转换

通用格式:

(typename)  value  //C语言风格

typename  (value)  //C++语言风格

========================================

总结

1、C++的基本类型分为两组,一组由存储为整数的值组成,另一组由存储为浮点格式的值组成。

2、wchar_t类型,用于扩展字符集

3、浮点类型可以表示小数值,以及比整型能够表示的值大得多的值。

4、C++使用运算符来提供对数字类型的算术运算

5、对变量赋值,使用不同类型运算时,使用强制类型转换时,C++把值从一种类型转换为另一种类型。很多类型转换都是“安全的”。即可以在不损失和改变数据的情况下完成转换。对于其他一些转换,如将浮点类型转换为整型,则需要更加小心。

C++_基础1-基本数据类型的更多相关文章

  1. C++_基础2-复合数据类型

    C语言使用术语“派生类型”,C++对类关系使用术语“派生”.所以就改用“复合类型”. 数组 数组是一种数据格式,能够存储多个同类型的值. 数组声明应指出以下三点: 存储在每个元素中的值的类型: 数组名 ...

  2. 01-Java基础知识:数据类型与变量、标识符、运算符、表达式

    Java基础知识:数据类型与变量.标识符.运算符.表达式 一.数据类型 Java定义了基本数据类型.引用数据类型.自定义类型. 八种基本数据类型:byte (1). short (2).  int ( ...

  3. web前端学习python之第一章_基础语法(二)

    web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...

  4. web前端学习python之第一章_基础语法(一)

    web前端学习python之第一章_基础语法(一) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...

  5. day 50 js-part1基础语法,数据类型及用法,流程控制语句,循环

    js基本概念: JavaScript 是世界上最流行的脚本语言. JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用. JavaScript ...

  6. 二.Python基础语法和数据类型

    Python第二节 基础语法和数据类型 Python编码 python3默认情况下源码文件以UTF-8编码, 字符串均为unicode字符串.同时也可以通过# -*- coding: cp-1252 ...

  7. mysql基础之基本数据类型

    原文:mysql基础之基本数据类型 列类型学习 mysql三大列类型 整型 Tinyint/ smallint/ mediumint/int/ bigint(M) unsigned zerofill ...

  8. JAVA_SE基础——9.基本数据类型间的转换

    前面我已经教会大家基本的数据类型进行了介绍,   然后这篇文章,我来介绍下,基本数据类型的转换. Java中有两种类型转换形式,分别是自动类型转换和强制类型转换. Step1.自动类型转换. 自动类型 ...

  9. JAVA_SE基础——8.基本数据类型

    基本数据类型有:整数类型.浮点类型.字符类型.布尔类型 整数类型 整数类型用来存储整数数值,即没有小数部分的数值.与C.C++语言相同,整数在Java语言中有3种表示形式:十进制.八进制和十六进制. ...

随机推荐

  1. leetcode:First Missing Positive分析和实现

    题目大意: 传入整数数组nums,求nums中未出现的正整数中的最小值.要求算法在O(n)时间复杂度内实现,并且只能分配常量空间. 分析: 一般碰到这种问题,都先对数组进行排序,再遍历数组就可以找到最 ...

  2. git获取网上的项目

    这里是从coding.net上下载项目至本地phpstorm并配置好相关环境. 这里url地址正是项目路径.获取的地方是: 下面那个url直接复制粘贴. 自己选择一个目录,然后clone. 下面便是前 ...

  3. Hadoop对数据仓库的影响

    转载http://www.dwway.com/portal.php?mod=view&aid=9065 在过去三年,Hadoop生态系统已经大范围扩展,很多主要IT供应商都推出了Hadoop连 ...

  4. swift基本运算

    swift运算有单目运算,双目运算和三元运算 1:赋值操作 iX = iY//iX is 8 元组赋值 let (iX, iY = (, ) // iX is 8, iY is 7 和c语言不同的是, ...

  5. 使用 tpl 标签和 for 读取对象属性值中的数组

    来源于<sencha touch 权威指南> ----------------------------- 只摘抄app.js代码: Ext.require(['Ext.form.Panel ...

  6. mvc json 日期问题的最简单解决方法

    1.首先编写BaseController这个类,需要引入Newtonsoft.Json.dll程序集 using System;using System.Collections.Generic;usi ...

  7. java - Logback获取方法名称

    java - Logback获取方法名称 摘自: https://blog.csdn.net/qq853632587/article/details/78222780 我们目前正在从 Log4J 迁移 ...

  8. mysql5.6数据库双机热备、主从备份

    主题:mysql5.6数据库双机热备.主从备份 缘由: 在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一.尤其是在大规模系统中,数据库集群已经成为必备的配置之一.集群的好处主要有:查询 ...

  9. Azure SQL作業

    由於要定期去刪除比較久的資料,礙於Azure SQL DB目前無法直接創建作業,目前找到一種方式就是通過local的SQL SERVER來執行AZURE SQL指令. 步驟如下: SQL Server ...

  10. SqlServer删除重复数据的方法

    方法一 declare @max integer,@id integer open cur_rows fetch cur_rows into @id,@max begin set rowcount @ ...