signedintb;
b=(pow(2,32)-1)/2;
cout<
b=85;
cout<
}
4294967295ffffffff
21474836477fffffff
8555
2.2常量
2.2.1什么是常量
数值型常量、字符型常量。
2.2.2数值常量:
整常量
1.整型常量的类型
从字面上和在表达式中所参加的运算中区分:
55,32769
整常量可以用十进制、八进制和十六进制来表示。
十进制整常量:
由0—9的数字组成,但第一位不能以0开始,也没有小数部分。
输出时用”dec”
八进制整常量:
以0开始,由0—7的数字组成。
输出时用“oct”
十六进制整常量:
以0X(x不分大小写)开始,由0—9的数字及A—F的字母(大小写均可)组成。
输出时用“hex”
负号:
在它们的前面都可用负号表示负数,例如:
0545-05450X5AF-0xabc
2.浮点常量
浮点常量:
就是实数。
在C++中,浮点数可以用浮点表示,也允许科学表示法。
例如:
-52.50.515E+265.5E-135.8E5-6.8E2
浮点常量的数据类型:
没有标记为double类型,但可以在其后加后缀F(f)使其为float类型,或加后缀L(l)变为longdouble类型。
例如:
-53.8F53.8f35.6E5F0.5L35.6E+51
浮点数在内存中存储形式是指数形式.
2.2.3字符常量
1.普通的字符常量
括在单引号中的一个字符称作字符常量,例如:
’A’,’$’,‘‘(空格)。
字符常量的类型是char类型。
2.转义字符常量
在ASCII字符集中,有些代码表示控制命令,是不可显示的,有些是无法从键盘上直接输入的,由C++提供的一种称作转义序列的方法来表示字符或控制代码。
下面是C++预定义的转义序列,它们都表示一个字符。
\a响铃ASCII7
\n新行ASCII10
\t水平制表符(tab键)ASCII9
\v垂直制表符ASCII11
\b回退符(backspace键)ASCII8
\r回车符ASCII13
\f换页ASCII12
\\反斜杠ASCII92
\’单引号ASCII39
\”双引号ASCII34
可以用十六制或八进制值来表示ASCII码字符集中的任何一个字符或控制代码,这种转义序列以反斜杠开始:
\nnn八进制值形式
\xnnn十六进制值形式
其中nnn表示三位十六进制或八进制数。
八进制转义序列在反斜杠后面紧跟八进制数组成的序列即可,而十六进制转义序列需要在反斜杠后面要接一个小写字母x,以表示后面是由十六进制数组成的序列,例如,字符a的十六进制编码是61,用转义序列表示字符a可以写成’\x61。
cout<<"\x61"<cout<<"\x7"<#include
voidmain()
{
chara;
a='a';
cout<}
9761
3.字符数据在内存中存储形式及使用方法
例2.1将字符赋给整型变量
#include
usingnamespacestd;
intmain()
{
inti,j;i='A';j='B';
cout<
return0;
}
6566
例2.2字符数据与整数进行算数运算
#include
usingnamespacestd;
intmain()
{
charc1,c2;c1='a';c2='b';
c1=c1-32;c2=c2-32;
cout<return0;
}
AB
4.字符串
字符串常量(简称字符串)是用一对双撇号括号起来的字符序列,例如:
“Thisisastring\n”
“abc”
编译系统会在字符串最后自动加一个’\0’作为字符串结束标志。
由于空格也是一个字符,所以字符串可以包含空格,字符串中也可以包含转义序列。
字符串是一种特殊的常量,它的类型不是基本数据类型,稍后再解释字符串的类型。
当两个字符串仅用空白相隔时,它表示一个串,例如:
“Thisis”“astring”
#include
voidmain()
{
cout<<"Thisis""astring"<cout<<"\nNewline!
";
}
Thisisastring
Newline!
2.2.4符号常量
#include
usingnamespacestd;
#definePRICE30
intmain()
{
intnum=10,total;
total=num*PRICE;
cout<<"total="<return0;
}
total=300
2.3变量
2.3.1什么是变量
变量:
2.3.2变量名规则
标识符是程序员定义的名字,用作变量名、函数名和类型名等。
标识符的组成元素和组成规则:
由大小写字母、下划线和0-9的数字组成,组成标识符的规则是以字母或下划线开头,其后可跟数字、下划线、零个或多个字母。
例如:
12c是不合法的标识符,而D$7_I和工资呢?
标识符的长度:
长度可以是任意的,不同的C++编译器能识别的最大长度是有限的,编译器忽略掉多余的字符,而不认为是个错误。
不允许同名:
但如两个标识符的有效字符相同,则出现重定义错误。
区分大小写:
在C++中,大小写字母是有区别的。
例如:
Dd是两个不同的标识符
2.3.3定义变量
变量类型变量名表列
2.3.4为变量赋初值
2.3.5常变量
constinta=3;
2.4C++的运算符
运算:
运算是对数据进行加工的过程。
运算符:
记述各种不同运算的符号称为运算符。
操作数:
参与运算的数据称为操作数。
表1.2给出C++的全部运算符及优先级。
表1.2C++的全部运算符及优先级。
优先级
运算符
结合方向
1
()[]->· :
:
*&(引用)
从左至右
2
!
~++---(负号)sizeof
*(递引用)&(取地址)newdelete
从右至左
3
*/%
从左至右
4
+-(减法)
从左至右
5
>><<
从左至右
6
<<=>>=
从左至右
7
==!
=
从左至右
8
&
从左至右
9
^
从左至右
10
|
从左至右
11
&&
从左至右
12
||
从左至右
13
?
:
从右至左
14
=+=-=*=/=%=>>=<<=&=^=|=
从右至左
15
从左至右
运算符的分类:
按运算符和操作数的关系,运算符分为一元、二元和三元运算符,分别对一个、二个和三个操作数进行运算。
按运算符和操作数的运算性质,又可分为算术运算符、逻辑运算符、关系运算符、位运算符和其它运算符。
2.5算术运算符与算术表达式
2.5.1基本的算术运算符
C++提供的一元算术运算符是一元减,其作用是取操作数的负值,例如;-a,其运算结果是取a的负值。
C++提供的二元算术运算符如下:
+-*/%
加减乘除取模
这些运算符的作用和通常代数中的概念是一致的,但有如下说明:
(1)%是取模运算符,a%b的结果是a被b除的余数。
例如,7%5结果是2。
%运算符只能用于整型操作数,其它运算符可以用于整型或浮点类型的操作数。
(2)当运算符/用于整型操作数时,结果类型是整型,其值为商,例如7/5的结果是1,5/7的结果是0,小数部分被舍弃了。
-5/3呢?
2.5.2算术表达式和运算符的优先级和结合性
算术表达式:
例如:
2555+95x+ya*(b+c)a*b+cx+25
都是表达式的例子,其中表达式25和55+95的操作数都是常量,称为常量表达式。
表达式的计算顺序:
在对一个表达式求值时,先计算括号内的表达式,再计算括号外的表达式,优先级高的运算符先运算,优先级低的运算符后运算。
当一个表达式中出现各种运算符时,运算符的优先级和结合性决定一个表达式的求值顺序。
二元算术运算符自左至右进行运算。
又称”左结合性”,
#include
voidmain()
{
inta=5,b=7;
cout<
cout<
cout<}
2
1
0
溢出:
与算术运算有关的一个问题是表达式计算中的溢出外理问题。
在C++中,被零除和浮点溢出被个为一个错误导致终止程序的运行。
但整数溢出却不认为是一个错误,原因在于有时需要得用整数溢出进行一些较低级的程序设计。
可以通过将它们都设为long类型变量来解决这个问题。
#include
voidmain()
{
intc=0;
cout<<8.8/c<shortd=32767;
d=d+10;
cout<}
1.#INF
-32759
2.5.3表达式中各类数值型数据间的混合运算
10+’a’+1.5-8765.1234*’b’
inti;floatf;doubled;longe;
10+’a’+i*f-d/e
2.5.4自增和自减运算符
C++的增1和减1运算符(++和――)也含有赋值操作,这两个运算将所施予的操作数(必须是一个左值)加1或减1。
例如:
i++++ii----i
例如:
i=1;j=i++;
使j的值为1,i的值为2,而语句i=1;j=++i;
使i和j的值都为2。
对于减1运算符也是一样的。
前缀是先赋值后参加计算,后缀是先参加计算后赋值。
注意:
增1和减1运算符只能用于左值(例如变量),下面这个表达式是非法的:
++(i+j);
2.5.5强制类型转换运算符
(类型名)(表达式)
类型名(表达式)
2.6赋值运算符与赋值表达式
2.6.1赋值运算符
2.6.2赋值过程中的类型转换
赋值类型转换:
例如:
doublex;inty;x=y;y+=0.5;
对于第一个语句,y的值首先转换为double类型的值,然后置给x,表达式x=y的类型为double类型。
对于第二个表达式,y的值首先转换成double类型的值。
然后与0.5相加,该运算结果为double类型的值,这个值被转换为int类型的值以后置给y。
例2.5将有符号数据传给无符号数据
#include
usingnamespacestd;
intmain()
{
unsignedshorta;
shortintb=-1;
a=b;
cout<<"a="<return0;
}
a=65535
2.6.3复合的赋值运算符
C++还提供了下述几个赋值运算符:
+=-=*=/=%=
<<=>>=&=^=|=
这些运算符都是二元运算符,并且是“自右至左”,它们的优先级和简单赋值的优先级一样。
假设op表示这些运算符中符号“=”左边的运算符,则表达式
左值op=表达式可以理解为左值=左值op(表达式)
2.6.4赋值表达式
赋值运算:
赋值运算用于改变一个存储区域的内容。
C++提供一个简单的赋值运算符=,它将右操作数的值置给左操作数,左操作数必须是一个左值。
在C++中,赋值是一个表达式,表达式的值是左操作数赋值后的值。
因此,在C++中允许下面赋值:
i=j=25;
#include
voidmain()
{
inta,b;
cout<<(a=18)<cout<b=a=23;
cout<}
18
18
2323
2.7逗号运算符与逗号表达式
逗号表达式:
用于隔开一个表达式序列的逗号运算符仍是一个表达式。
逗号表达式的运算顺序和运算结果:
计算顺序从左到右依次进行,只保留最后一个表达式的值,其它表达式的值都丢弃掉,这最后一个表达式的值作为逗号表达式的值,而数据类型是这个值的类型,
逗号表达式的优先级最低,引入逗号表达式的是为了简化程序的书写。
在C++语言中常用逗号表达式