Cpp:基本内置类型&字面值常量

一、基本内置类型


C++定义的几种基本的算术类型intcharfloatbool。以及特殊的void类型,void类型没有对应的值,通常用作无返回值函数的返回类型。

|类型 | 含义 | 最小存储空间(位)|
|:---- |:-- -----|:-------------|
|bool | 布尔型 | - |
|char | 字符型 | 8|
|wchar_t | 宽字符型 |16|
|short | 短整型| 16|
|int | 整型 | 16|
|long | 长整型 | 32|
|float | 单精度浮点型 | 6位有效数字|
|double | 双精度浮点型 | 10位有效数字|
|long double | 拓展精度浮点型 | 10位有效数字|

注:即使是c++标准规定了存储标准,但是并不能阻止编译器使用更大的存储空间。而且,对于int型几乎所有编译器使用的空间都比所要求的大。

1、整型

表示整数、<span style="color:red">字符</span>和布尔值的算术类型合称为整型(integral type)。(没错,字符也是整型!)
1 word(字) = 4 byte(字节) = 32 bit(位)

  • 字符类型有两种:charwchar_t。char能够保证存储机器基本字符集中任何字符相应的数值,因此char通常是单个机器字节(byte);wchar_t类型用于拓展字符集,如汉字和日语,这些字符集中的一些字符不能用单个char表示;
  • shortintlong都表示整型值。一般short为半个字(word)长,int为一个字长,而long为一个或两个字长(32位机器中int和long通常字长相同);
  • bool:true, false。可以将整型值赋给bool对象,0值表示false,非0值都代表true;

1.1、signed和unsigned

整型除了bool之外都可以带符号(signed)也可以不带符号(unsigned)。

  • signed(带符号):能表示正数也可以表示负数(包括0);
  • unsigned(不带符号):只能表示0及以上的数;

int,short和long默认是带符号型,需要指定unsigned才能获得无符号类型,其中unsigned int可以简写为unsigned。

1.2、整型值的表示

  • unsigned类型的所有位均可表示数值。例如,在机器中定义了一种类型使用8位表示,则该类型的取值范围是 0~255;
  • signed类型在c++标准中并未定义如何用位来表示(我读的《C++primer》版本是第4版),由编译器自由决定。8位的signed类型取值范围至少是 -127~127,也有允许 -128~127.

1.3、整型的赋值

疑问:当把一个超过其取值范围的值赋给一个指定类型的对象时,会发生什么?

  • unsigned:编译器必须调整越界值使其满足要求,编译器会将该值对该类型的可能取值数求模。
    例如8位的unsigned char,取值范围是 0~255,则可能的取值数是 256。当试图把 336存储到unsigned char中,实际存储的是80,因为 336%256 = 80。
    注:c++中把负值赋给unsigned对象是完全合法的
  • signed:由编译器决定,可能跟unsigned类似,也可能采取其他方式。

2、浮点型

  • float(单精度浮点数):一个字长(32位)
  • double(双精度浮点数):两个字长(64位)
  • long double(拓展精度):三或四个字长(96位或128位)

二、字面值常量


像42这样的值,在程序中被称为字面值常量(literal constant)。

称它为字面值是因为只能用它的值来称呼它,称为常量是因为它的值不能被修改。

每个字面值都有相应的类型,例如:0是int型;3.14159是double型。

只有内置类型存在字面值,没有类类型的字面值。因此,标准库类型没有字面值。

2.1、整型字面值规则

整数常量可以使用下列三种进制的任意一种:十进制、八进制和十六进制

例如值20的定义:

  • decimal: 20
  • octal: 024
  • hexadecimal: 0x14

字面值整数常量的默认类型为int或long

这取决与字面值——值适合int就是int型,大于int就是long(即,假设int为1机器字长(32位),则 -2^31+1 ~ 2^31-1 为int,大于 2^31-1 的为long)。

通过加后缀可以把字面值类型转换成long,unsigned或unsigned long。

  • long: 20L
  • unsigned: 20U(20u)
  • unsigned long: 20UL(20LU/20Lu/20uL)

注:定义long类型时,推荐使用大写字母 L ,因为用户读起来时,小写字母 l 很容易和数字 1 混淆!

2.2、浮点字面值规则

可以用十进制或科学计数法表示浮点字面值常量。

科学计数法指的是,指数用 E 或 e 表示。

默认的浮点字面值常量是double型。后缀加上 F 或 f 表示单精度,加上 L 或 l 表示拓展精度(<span style="color:red">不推荐使用小写字母 l</span>)

下面每一列的字面值是表示相同的值:

3.14159F .001f 12.345L 0.
3.14159E0f 1E-3f 1.2345E1L 0e0

2.3、布尔字面值和字符字面值

bool的字面值: true和false

可打印的字符型字面常量通常用一对单引号来定义: 'a', '2', ',', ' '(空格)
加上 L 可以得到 wchar_t 类型的宽字符字面值: L'a'

2.4、非打印字符的转义序列

\n \r \a \b \t \v \f ? " ' \
换行符 回车符 报警符 退格符 水平制表符 纵向制表符 进纸符 疑问号 双引号 单引号 反斜杠

任何字符都可以通过 “\XXX” 的形式表示,“XXX”表示三位八进制数字。下面是用ASCII码表示字面常量:

  • \7 : 报警符
  • \0 : 空格符
  • \12: 换行符
  • \40: 空格符
  • \115: 'M'
  • \062: '2'

2.5、字符串字面值

前面的均是基本内置类型,下面的 字符串字面值 会更复杂一些,后续会详细说明。

字符串字面值常量是 双引号括起来的零个或多个字符不可打印的字符使用相应的转义字符。

  • "Hello World!"
  • ""
  • "\nHello\tWorld!\n"

注:为了兼容C语言,C++会在所有字符串字面值常量末尾添加一个空字符
如 'A' 表示 单个字符 A,而 "A" 表示字符 A 和一个空字符两个字符的字符串

2.6、字符串字面值的连接

std::cout << "Hello"
            " "
            "World" "!"
         << std::endl;

等价于

std::cout << "Hello World!" <<std::endl;

但是下面试图连接 字符串字面值和宽字符串字面值 是非法的

std::cout << "Hello" L" World!" <<std::endl;

2.7、多行字面值

std::cou\
t<< "Hello" << st\
d::endl;

等价于

std::cout << "Hello" << std::endl;

反斜杠 '' 必须是该行的结尾,不允许后面有空格或注释。同样的,下一行的前面也不能有任何空格和制表符。

对于下一个 长字符串 例子,反斜杠后也不能有其他字符;而后一行的前面所有空格或制表符都会成为 长字符串的一部分

std::cout << "Hello \
    World!" << std::endl;

END.


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 基本内置类型 算术类型字符整型布尔值浮点数 空类型(void) 算术类型 带符号类型和无符号类型int、short...
    2625K阅读 3,121评论 0 1
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,865评论 6 13
  • C++中变量以及基本类型 内置类型包括:字符,整型,浮点型等;同时C+还支持更加复杂的数据类型,首先来看看基本的内...
    秋风弄影阅读 636评论 0 1
  • 我想过很多次和你说再见的场景,而你却一声不吭地悄然离去。我花了四年告诉自己,你走了永远不会回来了,后来我真的...
    恋澍阅读 368评论 0 0
  • -这里要分配的是允许java使用的最大内存大小,要根据MAS服务器实际配置而定。建议配置如下: 1G内存:JAVA...
    望月成三人阅读 2,868评论 0 0