数据类型及其在Visual C++中字节数
说明:
(1)一般在16位机的C++系统中,短整型和整型2字节,长整型4字节;在Visual C++中,短整型2字节,整型和长整型4字节。
(2)整型数据以二进制存储。
(3)在int和char型前面,可以加修饰符signed或unsigned(表示有无符号)。如果signed,则数值以补码形式存放,存储单元中的最高位(bit)用来表示数值的符号。
(4)在Visual C++中,对float提供6位有效数字,对double提供15位有效数字,两者的数值范围不同。
常量的值是不能改变的,一般从其字面形式即可判别是否为常量。这种从字面形式即可识别的常量称为“字面常量”和“直接常量”。
1、整型常量(整数)的类型
注意:常量无unsigned型。但一个非负值的整数可以赋值给unsigned型变量,只要范围不超过。
一个整型常量可以用3中不同的方式表示:
(1)十进制整数。在一个整常量后面加一个字母l或L,则认为是long int型常量。eg:123L。往往用于函数调用中。
(2)八进制整数。在常数的开头加一个数字0。eg:020,这相当于十进制数16。
(3)十六进制整数。在常数的开头加一个数字0和一个字母X(x)。eg:0X20,这相当于十进制数32。
2、浮点数的表示方法
(1)十进制小数形式。如果在实数的数字之后加字母F(f),表示此数为单精度浮点数,占4字节。如果在实数的数字之后加字母L(l),表示此数为长双精度浮点数,占8字节。
(2)指数形式(浮点形式)。
一般形式:数符 数字部分 指数部分
3、字符常量
(1)普通的字符常量
(a)字符常量只包括一个字符,'AB’是不合法的。
(b)区分大小写,‘A’,'a’不一样
(2)转义字符常量"\"
常见转义字符
字符形式 | 含义 |
---|---|
\n | 换行 |
\t | 水平制表(跳到下一个tab位置) |
\0 | 空字符 |
(3)字符数据在内存中的存储形式及其使用方法
将一个字符常量存放到内存单元时,存放该字符相应的ASCII码。
注:一个字符数据可以赋给一个整型变量,一个整型数据也可以赋给一个字符变量。也可对字符数据进行算术运算,相当于对它们的ASCII码进行运算。
4、字符串常量
字符串常量’abc’在内存中占4个字节(而不是3个字节),编译系统会在字符串最后自动加一个’\0’作为字符串结束标志。但‘\0’不是字符串的一部分,若输出,只输出abc。
用一个符号名代表一个常量
#define PRICE 60
PS:以上define方法C常用,C++不常用, C++常用const(见下文)。
用预处理指令指定PRICE在本程序中代表常量30。在进行编译时,所有的PRICE都被置换为字符30。
好处:
(1)含义清楚
(2)“一改全改”
在程序运行期间其值可以改变的量称为变量。
注:区分变量名与变量值。
标识符:用来标识变量、符号常量、函数、数组、类型等实体名字的有效字符序列。
组成:字母、数字、下划线
且第一个字符不能为数字
先定义,后使用
形式:数据类型 数据名列表
注:
(1)凡未被事先定义的,不作为变量名。(方便发现错误)
(2)每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。
(3)指定每一变量属于一个特定的类型,便于在编译时,据此检查该变量所进行的运算是否合法。
允许在定义变量是对它赋予一个初值,称为变量初始化。
int a,b=4,c=3*5; //a未被初始化,b为4,c为15
在定义变量时,如果加上关键字const,则变量的值在程序运行期间不能改变,称为常变量。
const int a=3;//正确,a始终为3 const int a; a=3; //错误,常变量不能被赋值 const int b=3+6;//正确,b为9
符号常量与常变量的区别
符号常量:用一个符号代替一个字符串,在预编译时把所有符号常量替换为所指定的字符串,无类型,在内存中不存在以符号常量命名的存储单元。
常变量:常变量具有变量的特征,有类型,在内存中存在着以它命名的存储单元,可用sizeof运算符测出其长度。(与一般变量唯一的区别是其值不能被改变)
类型 | 符号 |
---|---|
算术运算符 | +、-、*、/、++、– |
关系运算符 | >、<、==、>=、<=、!= |
逻辑运算符 | &&、||、! |
位移运算符 | <<、>>、&、|、^、~ |
赋值运算符 | = |
条件运算符 | ?: |
逗号运算符 | , |
指针运算符 | * |
引用运算符 | & |
求字节运算符 | sizeof |
强制类型转换运算符 | (类型)或类型() |
成员运算符 | . |
指向成员的运算符 | -> |
下标运算符 | [ ] |
其他 | 如函数调用运算符() |
注:
(1)两数相除结果取整数,5/3=1。但如果两数中有一个为负数,则舍入结果不一定,有-1也有可能-2。多数编译系统采取“向零取整”的方法,即5/3=1,-5/3=-1。
(2)%取模运算符两侧均应为整型数据。如果±*/运算中,两数中有一个为float型,则运算结果是double型。C++在运算时对所有float型数据都按double型数据处理。
注:
(1)如果在一个运算对象两侧的运算符的优先级别相同,则按规定的“结合方向”(自左至右即左结合性)处理。
(2)先按优先级,优先级相同则按结合方向处理。
运算符优先级从高到低 |
---|
初等运算符 |
单目运算符 |
算数运算符 |
关系运算符 |
逻辑运算符 |
条件运算符 |
赋值运算符 |
逗号运算符 |
在进行运算时,不同类型的数据要先转换成同一类型,然后运算。
double ← float
↑
long
↑
unsigned
↑
int ← char,short
(←表示必定的转换)
++i 在使用i之前,先使i的值加1
如果i的原始值为3,则j = ++i后,j=4
- -i 在使用i之前,先使i的值减1
如果i的原始值为3,则j = - -i后,j=2
i++ 在使用i之后,使i的值加1
如果i的原始值为3,则j = i++后,j=3,i=4
i- - 在使用i之后,使i的值减1
如果i的原始值为3,则j = - -i后,j=3,i=2
如果赋值运算符的两侧类型不一样,但都是数值型或字符型时,在赋值时自动进行分类转换。
(1)浮点型赋给整型,舍弃小数部分。i=3.5,i为3。
(2)整型赋给浮点型,数值不变,但以指数形式存储到变量中。
(3)将一个double型数据赋给float时,注意数值范围不能溢出。
(4)字符型赋给整型,将字符的ASCII码赋给整型。
(5)将一个int,short或long型赋给char型,只将其低8位原封不动地送到char型变量。
不同类型的整型数据间的赋值归根到底就是一条:按存储单元中的存储形式直接传送。
+=、-=、*=、/=、%=、<<=、等(所有二目运算符都可与=复合)
x = y+8 等价于 x = x(y+8)
形式:变量 = 表达式
左值:赋值运算符左侧,可以是变量,不能是表达式,也不能是常变量
右值:赋值运算符右侧
C++将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句)中。
形式:表达式1,表达式2
逗号表达式的求解过程是:先求表达式1,再求表达式2。整个逗号表达式的值是表达式2的值。
eg:a=3*5,a*4
赋值运算符的优先级别高于逗号运算符,因此应先求解a=3*5,得到15,然后再求解a*4,得到60。
C++的输出和输入都是用“流”(stream)的方法实现的。
数据流是由一系列字节组成的,这些字节是按进入“流”的顺序排序的。cout是输出流对象的名字,cin是输入流对象的名字。
<<是流插入运算符,其作用是将需要输出的内容插入到输出流中;>>是流提取运算符,其作用是从默认的输入设备的输入流中提取若干个字节送到计算机内存区中指定的变量。