C++_基础1-基本数据类型
面向对象(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-基本数据类型的更多相关文章
- C++_基础2-复合数据类型
C语言使用术语“派生类型”,C++对类关系使用术语“派生”.所以就改用“复合类型”. 数组 数组是一种数据格式,能够存储多个同类型的值. 数组声明应指出以下三点: 存储在每个元素中的值的类型: 数组名 ...
- 01-Java基础知识:数据类型与变量、标识符、运算符、表达式
Java基础知识:数据类型与变量.标识符.运算符.表达式 一.数据类型 Java定义了基本数据类型.引用数据类型.自定义类型. 八种基本数据类型:byte (1). short (2). int ( ...
- web前端学习python之第一章_基础语法(二)
web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- web前端学习python之第一章_基础语法(一)
web前端学习python之第一章_基础语法(一) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- day 50 js-part1基础语法,数据类型及用法,流程控制语句,循环
js基本概念: JavaScript 是世界上最流行的脚本语言. JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用. JavaScript ...
- 二.Python基础语法和数据类型
Python第二节 基础语法和数据类型 Python编码 python3默认情况下源码文件以UTF-8编码, 字符串均为unicode字符串.同时也可以通过# -*- coding: cp-1252 ...
- mysql基础之基本数据类型
原文:mysql基础之基本数据类型 列类型学习 mysql三大列类型 整型 Tinyint/ smallint/ mediumint/int/ bigint(M) unsigned zerofill ...
- JAVA_SE基础——9.基本数据类型间的转换
前面我已经教会大家基本的数据类型进行了介绍, 然后这篇文章,我来介绍下,基本数据类型的转换. Java中有两种类型转换形式,分别是自动类型转换和强制类型转换. Step1.自动类型转换. 自动类型 ...
- JAVA_SE基础——8.基本数据类型
基本数据类型有:整数类型.浮点类型.字符类型.布尔类型 整数类型 整数类型用来存储整数数值,即没有小数部分的数值.与C.C++语言相同,整数在Java语言中有3种表示形式:十进制.八进制和十六进制. ...
随机推荐
- 求正整数n的所有因子
因子的概念:假如整数n除以m,结果是无余数的整数,那么我们称m就是n的因子. 需要注意的是,唯有被除数,除数,商皆为整数,余数为零时,此关系才成立.反过来说,我们称n为m的倍数. 求一个正整数n的所有 ...
- python子进程模块subprocess详解与应用实例 之二
1.2. Popen 对象 Popen类的实例有下列方法: 1. Popen.poll() 检查子进程是否已经结束,设置并返回返回码值. 2. Popen.wait() 等待子进程结束,设置并返回返回 ...
- 575. Distribute Candies 平均分糖果,但要求种类最多
[抄题]: Given an integer array with even length, where different numbers in this array represent diffe ...
- Servlet和JSP简述
什么是Servlet和JSP 用Java开发Web应用程序时用到的技术主要有两种,即Servlet和JSP. Servlet是在服务器端执行的Java程序,一个被称为Servlet容器的程序(其实就是 ...
- CRC-32 校验算法
crc32的头文件 ===========================分割线=========================== //crc32.h #ifndef _CRC32_H #de ...
- 七、CommonJS规范和Note.js模块概念的介绍
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多 ...
- 光猫烽火Hg220破解超级口令实用图文教程(亲测)
1.用光猫背后的useradmin 帐号和密码登录 192.168.1.12.然后下载http://192.168.1.1/backupsettings.conf3.用记事本打开,ctrl+F,查找关 ...
- 金庸笔下的"程序员" | 附金庸武侠全集
金庸 飞雪连天射白鹿,笑书神侠倚碧鸳当您八十高龄取得牛津大学唐朝史学博士学位,我还以为这是另一部史诗开始的信号,然而没有后续了.我的高中到大学,是十遍<笑傲江湖>的距离,我的整个青春,是大 ...
- MySQL索引的索引长度问题
转自:http://samyubw.blog.51cto.com/978243/223773 MySQL的每个单表中所创建的索引长度是有限制的,且对不同存储引擎下的表有不同的限制. 在MyISAM表中 ...
- 【SSO单点系列】(4):CAS4.0 SERVER登录后用户信息的返回
接着上一篇,在上一篇中我们描述了怎么在CAS SERVER登录页上添加验证码,并进行登录.一旦CAS SERVER验证成功后,我们就会跳转到客户端中去.跳转到客户端去后,大家想一想,客户端总要获取用户 ...