搜索
有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 1601|回复: 11
收起左侧

C++教程(二):基本内置类型

[复制链接]

该用户从未签到

258

主题

314

好友

3万

积分

第二章

积分
35715
发表于 2012-7-21 20:43:39 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
本帖最后由 轻舟过 于 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`,来表示宽字符串字面值。
博客什么的求人气 http://bimania.org
回复

使用道具 举报

该用户从未签到

12

主题

9

好友

5万

积分

第三章

积分
51687
发表于 2013-2-24 10:47:16 | 显示全部楼层
马住!
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

25

主题

59

好友

8779

积分

序章

积分
8779
发表于 2013-2-25 13:29:46 | 显示全部楼层
路過頂一頂,寫得真不錯
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

9

好友

4395

积分

序章

积分
4395
发表于 2013-3-5 23:29:44 | 显示全部楼层
很赞
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 2 天

连续签到: 1 天

[LV.1]初来乍到

4

主题

55

好友

2万

积分

第一章

积分
24330
发表于 2013-3-7 23:51:31 | 显示全部楼层
好仔细,谢谢,受教
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

27

主题

33

好友

1万

积分

第一章

积分
18429
发表于 2013-3-24 14:11:59 | 显示全部楼层
其实,应该加一点有关二进制类的东西在这里吧……毕竟这种东西,外面书上多的是,可是二进制类的很少
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

258

主题

314

好友

3万

积分

第二章

积分
35715
 楼主| 发表于 2013-3-24 23:47:09 | 显示全部楼层

二进制是说整数、浮点数等的二进制表示、位运算之类的吗?
博客什么的求人气 http://bimania.org
回复 支持 反对

使用道具 举报

该用户从未签到

25

主题

59

好友

8779

积分

序章

积分
8779
发表于 2013-3-25 00:01:25 | 显示全部楼层
轻舟过 发表于 2013-3-24 23:47
二进制是说整数、浮点数等的二进制表示、位运算之类的吗?

位運算的應用 :)
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

258

主题

314

好友

3万

积分

第二章

积分
35715
 楼主| 发表于 2013-3-25 01:02:47 | 显示全部楼层
terry182 发表于 2013-3-25 00:01
位運算的應用 :)

这种我感觉应该超出了语言的范畴了
不过位运算的应用还是非常有意思的
比如下面两个页面里提到的一些应用
http://www.matrix67.com/blog/archives/122
http://graphics.stanford.edu/~seander/bithacks.html
博客什么的求人气 http://bimania.org
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

14

好友

3999

积分

序章

积分
3999
发表于 2013-4-9 21:08:52 | 显示全部楼层
学到东西了
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

12

好友

4343

积分

序章

积分
4343
发表于 2013-4-11 17:43:06 | 显示全部楼层
非常全面,点赞
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

13

好友

5689

积分

序章

积分
5689
发表于 2013-5-19 13:17:07 | 显示全部楼层
做了兩個小時的簡易筆記orz【記性不好
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(Z站|基宅) ( 粤ICP备18082987号-1 )

GMT+8, 2025-5-10 12:10 , Processed in 0.119939 second(s), 33 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表