C/C++语言的语法基础
数据类型指明变量或表达式的状态和行为,数据类型决定了数的取值范围和允许执行的运算符集。c++语言数据类型可以分为两大类:基本类型和引用类型。基本类型是指不能再分解的数据类型,其数据在函数的调用中是以传值方式工作的;引用类型有时也称复合类型,它是可以分解为基本类型的数据类型,其数据在函数调用中是以传址方式来工作的。
一、整型
整数常量:整数常量是不带小数的数值,用来表示正负数。例2—2中Ox55、0x55ff、1000000都是c++语言的整数常量。C++语言的整数常量有三种形式:十进制、八进制、十六迸制。
(1)十进制整数是由不以0开头的0~9的数字组成的数据。
(2)八进制整数是由以0开头的0~7的数字组成的数据。
(3)十六进制整数是由以0x或0x开头的0~9的数字及A~F的字母(大小写字母均可)组成的数据。
例如:0,63,83是十进制数。00,077,0123是八进制数。0x0,Ox0,0x53,0x53,0x3f,0x3f是十六进制数。
整数常量的取值范围是有限的,它的大小取决于此类整型数的类型,与所使用的进制形式无关。
整型变量类型:整型变量类型有byte,short,int,long四种说明符,它们都是有符号整型变量类型。
(1)byte类型。byte类型说明一个带符号的8位整型变量。由于不同的机器对多字节数据的存储方式不同,可能是从低字节向高字节存储,也可能是从高字节向低字节存储。这样,在分析网络协议或文件格式时,为了解决不同机器上的字节存储顺序问题,用byte类型来表示数据是合适的。
(2)short类型。short类型说明一个带符号的16位整型变量。short类型限制了数据的存储应为先高字节,后低字节。
(3)int类型。int类型说明一个带符号的32位整型变量。int类型是一种最丰富、最有效的类型。它最常用于计数、数组访问和整数运算。
(4)long类型。long类型说明一个带符号的64位整型变量。对于大型计算,常常会遇到很大的整数,并超出int所表示的范围,这时要使用long类型。
二、浮点型
浮点数常量:浮点数是带有小数的十进制数,可用一般表示法或科学记数法表示。0.23f、0.7e-3都是c++语言的浮点数常量。
(1)一般表示法:十进制整数+小数点+十进制小数。
(2)科学记数法:十进制整数+小数点+十进制小数+E(或e)+正负号+指数。
例如:3.14159,0.567,9777.12是一般表示法形式,1.234e5,4.90867e-2是科学记数法形式。
c++语言的浮点数常量在机器中有单精度和双精度之分。单精度以32位形式存放,用f/F做后缀标记(可以省略);双精度则以64位形式存放。当一个浮点数常量没有特别指定精度时,则它为双精度浮点数常量。
浮点变量类型:浮点变量也称实数变量,用于需要精确到小数的函数运算中,有float和double两种类型说明符。
(1)float类型。
float类型是一个位数为32位的单精度浮点数。它具有运行速度较快,占用空间较少的特点。
(2)double类型。
double类型是一个位数为64的双精度浮点数。双精度数在某些具有优化和高速运算能力的现代处理机上运算比单精度数快。双精度类型double比单精度类型float具有更高的精度和更大表示范围,常常使用。
三、字符型
字符型常量:字符型常量是指由单引号括起来的单个字符。
例如:’a’,’A’,’z’,‘$’,’?’。
注意:’a’和’A’是两个不同的字符常量。
除了以上形式的字符常量外,c++语言还允许使用一种以“\”开头的特殊形式的字符常量。这种字符常量称为转义字符,用来表示一些不可显示的或有特殊意义的字符。
字符型变量:字符型变量的类型说明符为char,它在机器中占8位,其范围为0~255。
注意:字符型变量只能存放一个字符,不能存放多个字符,例如:
1
char a='am';这样定义赋值是错误的。
四、布尔型
布尔常量:布尔常量只有两个值:“true”和“false”,表示“真”和“假”,均为关键词,在机器中位长为8位。
布尔型变量:布尔型变量的类型说明符为booI,用来表示逻辑值。
五、运算符与表达式
C++语言中定义了丰富的运算符,如算术运算符、关系运算符、逻辑运算符等等,有些运算符需要两个操作数,使用形式为<操作数1>运算符<操作数2>。这样的运算符称为二元运算符(或二目运算符)。另一些运算符只需要一个操作数,称为一元运算符(或单目运算符)。
运算符具有优先级与结合性。当一个表达式包含多个运算符时,先进行优先级高的运算,再进行优先级低的运算。如果表达式中出现了多个相同优先级的运算,运算顺序就要看运算符的结合性了。所谓结合性,是指当一个操作数左右两边的运算符优先级相同时,按什么样的顺序进行运算,是自左向右,还是自右向左。例如,我们熟悉的算术表达式6+5-2中,“+”、 “-”是同级运算符,那么是先算5-2,还是先算6+5?这就取决于算术运算符的结合性。由于算术运算符的结合性为自左向右,所以应先算6+5,然后再算11-2。
六、算术运算符与算术表达式
C++中的算术运算符包括基本的算术运算符和自增、自减运算符。由算术运算符、操作数和括号构成的表达式称为算术表达式。
基本算术运算符有:+(加)、-(减或负号)、*(乘)、/(除)、%(取余)。其中“-”作为负号时为一元运算符,其余都为二元运算符。这些基本算术运算符的意义与数学中相应符号的意义是一致的。它们之间的相对优先级关系与数学中的也是一致的,即先乘除、后加减,同级运算自左向右进行。使用算术运算符要注意以下几点:
①“%”是取余运算,只能用于整型操作数。表达式a%b的结果为a/b的余数。 “%”的优先级与“/”相同。
②当“/”用于两整型操作数相除时,其结果取商的整数部分,小数部分被自动舍弃。因此,表达式1/2的结果为0,这一点需要特别注意。
⑧C++中的“++” (自增)、 “--” (自减)运算符是使用方便且效率很高的两个运算符,它们都是一元运算符。这两个运算符都有前置和后置两种使用形式。
无论写成前置或后置的形式,它们的作用都是将操作数的值增1(减1)后,重新写回该操作数在内存中的原有位置。所以,如果变量i原来的值是1,计算表达式i++后,表达式的结果为2,并且i的值也被改变为2。但是,当自增、自减运算的结果要被用于继续参与其它操作时,前置与后置时的情况就完全不同了。例如,如果i的值为l,则下列两条语句的执行结果是不一样的:
1
2
cout<<i++;
cout<<++i;
第一条语句首先输出i当前的值1,然后i自增,其值变为2;第二条语句首先使i自增为2,然后输出i的值2。
七、赋值运算符与赋值表达式
C++提供了几个赋值运算符,最简单的赋值运算符就是“=”。带有赋值运算符的表达式被称为赋值表达式。例如,m=m+6就是一个赋值表达式。赋值表达式的作用就是将等号右边表达式的值赋给等号左边的对象。赋值表达式的类型为等号左边对象的类型,表达式的结果为等号左边对象被赋值后的值,运算的结合性为自右向左。请看下列赋值表达式的例子。
1
n=1
表达式值为1。
1
a=b=c=2
这个表达式从右向左运算,在c被更新为2后,表达式c=2的值为2,接着b的值被更新为2,最后a被赋值为2。
1
a=3+(c=4)
表达式值为7,a的值为7,c为4。
除了“=”以外,C++还提供了10种复合的赋值运算符:+=,-=,*=,/=,%=,<<=,>>=,&=,“=,|=。其中,前五个运算符是赋值运算符与算术运算符复合而成的,后五个是赋值运算符与位运算符复合而成的。关于位运算,稍后再做介绍。这里10种运算符的优先级与“=”相同,结合性也是自右向左。现在举例说明复合赋值运算符的功能。
1
2
b+=2;//等价于b=b+2
x*=y+3;//等价于x=x*(y+3)
1
如果在赋值表达式后面加上分号,便成为了赋值语句。例如:
b=b+2:便是一个赋值语句,它实现的功能与赋值表达式相同。赋值表达式与赋值语句的不同点在于:赋值表达式可以作为一个更复杂表达式的一部分,继续参与运算;而赋值语句不能。
八、逗号运算符与逗号表达式
在C++中,逗号也是一个运算符,它的使用形式为<表达式1>,<表达式2>,…,<表达式n>。求解顺序为,先求解表达式1,再求解表达式2,最后求解表达式n的值。逗号表达式的最终结果为表达式n的值。例如:
1
x=2*5,x*4
表达式的结果为40。
九、关系运算符和关系表达式
关系运算符即比较符。用关系运算符将两个表达式连接起来就是关系表达式。关系表达式是一种最简单的逻辑表达式。例如:
1
2
3
x>5
x+y<=20
c==a+b
注意“==”(等于)是连续的两个等号,不要误写为赋值运算符“=”。
关系表达式一般用于判断是否符合某一条件。关系表达式的结果类型为bool,值只能是true或false。条件满足为true,条件不满足为false。例如,当x=t时,x>5的结果就为false。
十、逻辑运算符与逻辑表达式
只有简单的关系比较是远不能满足编程需要的,还需要用逻辑运算符将简单的关系表达式连接起来构成较复杂的逻辑表达式。逻辑表达式的结果类型也为bool,值只能为true或false。
“!”是一元运算符,使用形式是: !操作数。非运算的作用是对操作数取反。如果操作数a的值为true,则表达式!a的值为false:如果操作数a的值为false,则表达式!a的值为true。
“&&”是二元运算符。“&&”运算的作用是求两个操作数的逻辑与。只有当两个操作数的值都为true时,与运算的结果才为true,其它情况下与运算的结果均为false。
“||”也是二元运算符。 “||”运算的作用是求两个操作数的逻辑或。只有当两个操作数的值都为false时,或运算的结果才为false,其它情况下或运算的结果均为true。
十一、类和对象
类所表示的一组对象十分相似,可以作为模板来有效的创建对象,利用类可以产生很多的对象类所代表的事物或者概念都是抽象的。在存取Private类型数据或者函数的时候,只有类本身声明的函数才是被允许的。类在与外部连接时,利用的就是Public共有类型函数,任何外部函数的访问都是运行的。
对象主要是对客观事物的某个实体进行描述,它作为一个单位,共同组成了系统,它的组成是一组属性和一组服务,这组服务操作于这组属性。属性和服务是对象构成众多要素中的两种,属性的实质是一个数据项,主要是对对象静态特性进行描述,服务的实质是一个操作序列,主要是对对象动态特征进行描述。
C/C++语言的语法基础的更多相关文章
- Groovy语言学习--语法基础(5)
至此groovy语言学习-语法基础就结束了,新的工作已经安排下来,要干活了. 对groovy了解到一定程度之后就可以在java项目中对其进行引入了.为此新建了一个微型的项目,个人觉得千言万语不如代码实 ...
- Groovy语言学习--语法基础(1)
2018年11月末,从上家公司离职后进入现在的公司.进入项目以来,发现项目中有很多groovy脚本,以前没接触过groovy,抽时间系统地学一下,也方便后期项目的开发和维护. groovy和java的 ...
- Groovy语言学习--语法基础(4)
语法基础到此就结束了,毕竟其和Java许多地方并无差别.groovy作为脚本,是为了能更好地随业务变化调整规则,我根据自己对规则的理解 通过一张图简单描述一个groovy脚本场景:由于货币膨胀,经济收 ...
- Groovy语言学习--语法基础(3)
侧重点可能是groovy metaClass基元类的概念,有点像java的反射,因为java反射目前基本也没研究过,就mark一下,后续若有用到就深入研究一下. 基础语法的东西貌似差不多八九不离十了, ...
- htm语言的语法基础及规则
HTML的主要语法是元素和标签.元素是符合DTD(文档类型定义)的文档组成部分,如title(文档标题).IMG(图象).table(表格)等等.元素名不区分大小写的.HTML用标签来规定元素的属性和 ...
- python语言相关语法基础
numpy系列import numpya = numpy.array([[1,2], [3,4]])b = numpy.array([[5,6], [7,8]])a*b>>>arra ...
- Groovy语言学习--语法基础(2)
集合和闭包 因为之前没接触过C++等,对指针也一窍不通.个人不成熟的了解 闭包是一种数据类型,可以很方便的执行一段独立的代码 简化方法的调用 package groovy /** * Groovy容器 ...
- R语言语法基础二
R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...
- R语言语法基础一
R语言语法基础一 Hello world #这里是注释 myString = "hello world" print(myString) [1] "hello world ...
随机推荐
- Python 魔法方法详解
据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个, ...
- H5+混合移动app应用开发——坑我太甚
用了MUI之后,才发现,那坑比我想象之中的要多得多,有些是H5的坑,有些是plus的坑,接下来我一一来吐槽一番. IOS下面,上拉的时候,速度稍微快一点,表头自动隐藏,等你不拉的时候又自动显示 这种情 ...
- xml格式字符串转为Map
import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom ...
- java打包成jar文件
JAR包是Java中所特有一种压缩文档,其实大家就可以把它理解为.zip包.当然也是有区别的,JAR包中有一个META-INF\MANIFEST.MF文件,当你找成JAR包时,它会自动生成.JAR包是 ...
- form表单中enctype属性作用
上传文件时,提交的表单属性里需要加enctype="multipart/form-data",才能提交文件信息,不然会报错.那么enctype属性的作用是什么?就是设置表单传输的编 ...
- git 安装使用
系统ubuntu14.04 1.安装:sudo apt-get install git 2.设置name and Email: git config --global user.name " ...
- SSMS 2005 连接 SQL SERVER 2008问题
用本机的 Microsoft SQL Server Management Studio 2005 客户端连接数据库服务器时报错:"This version of Microsoft SQL ...
- php中curl模拟post提交多维数组(转载)
原文地址:http://www.cnblogs.com/mingaixin/archive/2012/11/09/2763265.html 今天需要用curl模拟post提交参数,请求同事提供的一个接 ...
- AutoCAD开发选择----ObjectARX还是.net API(转载)
本文基于AutoCAD 2006新推出的.NET API为工具,介绍了在.NET平台下对AutoCAD进行二次开发的技术,并与目前常用的VBA.ObjectARX作了对比.同时讨论了如何弥补.NET ...
- exif.js 旋转图片
还是那个问题:网上的大胸弟们BB一大堆,没几个给的代码能用的,话不多说,直接上demo: 链接:https://pan.baidu.com/s/1jJ6vnt8 密码:swwm 不要忽视demo中的s ...