- UID
- 74198
- 在线时间
- 0 小时
- 最后登录
- 2014-11-11
- 注册时间
- 2012-3-7
- 宅魂
- 5779 点
- 贡献
- 918 点
- 宅币
- 14724 枚
- 灵石
- 0 块
- 元气(技能点)
- 18 点
- 活跃
- 13 ℃
- 听众
- 18
- 收听
- 0
该用户从未签到
第二章
- 积分
- 35715
|
本帖最后由 轻舟过 于 2012-7-21 21:46 编辑
到这里看的话,排版可能会好看一些 http://bimania.org/2012/07/21/c-plus-plus-tutorial-2/
另外(一)在这里https://www.gn00.com/t-72636-1-1.html
类型是所有程序的基础。类型告诉我们数据代表什么意思以及可以对数据进行哪些操作,C++语言定义了几种基本类型,下面将对几种基本类型进行介绍。
基本内置类型
C++定义了一组表示整数、浮点数、单个字符和布尔值的算术类型,另外还定义了一种称为`void`的特殊类型。`void`类型没有对应的值,仅用在有限的一些情况下,通常用作无返回值函数的返回类型。
算术类型的存储需要占用一定空间,这里存储空间是指用来表示该类型的位(bit)数,C++的标准规定了每个算术类型的最小存储空间,但是实际上有些类型,几乎所有的编译器使用的空间都比所要求的大(比如`int`)。
整型
表示整数、字符和布尔值的算术类型合称为整型。
字符类型有两种:`char`和`wchar_t`。`char`类型保证能存储机器基本字符集中任何字符相应的数值,因此`char`类型通常是单个机器字节(byte)。`wchar_t`类型用于扩展字符集,比如汉字和日语,这些字符集中的一些字符不能用单个`char`来表示。
`short`、`int`、`long`类型都表示整数型值,存储空间大小不同,`int`通常是一个机器字长,在32位机上就是32位,`short`通常是半个机器字长,在32位机上就是16位,而`long`通常是一个或者两个机器字长,在32位机上`long`与`int`的字长是一样长的(`short`位数太少,在通常的计算中一般不使用,一般只是用`int`类型)。
`bool`类型表示逻辑值`true`和`false`,可以将算术类型的任何值付给`bool`对象。0值算术类型代表`false`,其余的值都代表`true`。
带符号和无符号类型
除`bool`类型外,整型可以是带符号和无符号的,无符号类型只能表示大于或者等于0的数,而带符号的可以表示正数和负数。三种类型都默认类型的带符号的,如果需要加上`unsigned`,比如`unsigned int`之类。
整型值的表示
对于无符号类型类来说,如果它是n位的,那么它可以取值0到2^n-1。对于n位有符号类型,通常会用1位来表示符号,因此它的取值范围为-2^(n-1), 到2^(n-1)-1。
浮点型
浮点型有`float`、`double`、`long double`三种,分别表示单精度浮点数、双精度浮点数和扩展精度浮点数。一般占用的空间依次为32位,64位,96或128位。对于实际的程序来说,`float`类型的精度通常是不够的,它只能保证6位有效数字,而`double`型可以保证10位有效数字,能满足大多数计算的需求。通常计算中使用`double`就可以了,而`long double`类型提供的精度通常没有必要,而且还要承担额外的运行代价。
字面值常量
像`42`这样的值,在程序中被当做字面值常量,因为它的值就是字面上看起来的那样。每个字面值都有相应的类型,例如:`0`是`int`型,`3.14`是`double`型等等。
整数字面值
定义字面值整数常量可以用十进制、八进制和十六进制。例如我们可以将值20定义成下面的任意一种: ,`024`,`0x14`。以`0`开头的字面值整数常量表示八进制,以`0x`或`0X`开头的表示十六进制。
字面值整数常量的类型默认为`int`或`long`,`int`还是`long`取决于值的大小。不过通过在值后面增加后缀可以将字面值强制转化为`long`,`unsigned`或`unsigned long`,通过在数值后面加`L`或者`l`指定字面值为`long`类型,在数值后面加`U`或`u`指定字面值为`unsigned`类型,同时加`L`和`U`就能得到`unsigned long`类型, 比如:
128u /* unsigned */ 1024UL /* unsigned long */
1L /* long */ 8Lu /* unsigned long */
浮点字面值
通常可以用十进制或者科学计数法来表示浮点字面值。使用科学计数法是,指数用`E`或者`e`表示。默认的浮点字面值常量为`double`类型。在数值后面加上`F`或`f`表示单精度。同样加上`L`或者`l`表示扩展精度。下面每一组字面值表示相同的值:
3.14159F .001f 12.345L 0.
3.14159E0f 1E-3F 1.2345E1L 0e0
布尔字面值
`true`和`false`是布尔型的字面值:
[mw_shl_code=cpp,true]bool test = false;[/mw_shl_code]
字符字面值
可打印字符的字面值通常用一对单引号来定义:
'a' '2' ',' ' ' // blank
这些字面值都是`char`类型的。在字符字面值前加`L`就能得到`wchar_t`类型的宽字符字面值。如`L'a'`。
另外还有一些不可打印或者在语言中有特殊意义的字符,需要通过转义字符来表示。转义字符都以反斜线符号开始,比较常用的有:
符号 | 转义序列
换行符 | `\n`
双引号 | `\"`
制表符 | `\t`
反斜线 | `\\`
单引号 | `\'`
另外我们也可以将任何字符表示为以下形式的通用转义字符`\ooo`, 这里`ooo`表示三个八进制数字,这三个数字表示字符的数字值。下面的例子是用ASCII码字符集表示字面值:
\7 (bell) \12 (newline) \40 (blank)
\0 (null) \062 ('2') \115 ('M')
字符`\0`通常表示空字符,下面将看到它有着非常特殊的含义。
当然也可以用十六进制转义字符来定义字符`\xddd`,它由一个反斜线、一个`x`和一个或者多个十六进制数字组成。
字符串字面值
字符串字面值常量用双引号括起来的零个或者多个字符表示,补课打印字符表示成相应的转义字符。
"Hello World!" // 字符串
"" // 空字符串
"\nCC\toptions\tfile.[cC]\n" // 包含换行和制表符的字符串
为了兼容C语言,C++中所有字符串字面值都由编译器自动在末尾添加一个空字符。因此`"A"`表示包含字母`A`和空字符`'\0'`两个字符的字符串。
在字符串字面值的前面加`L`,来表示宽字符串字面值。 |
|