C++ Primer 笔记二 基本内置类型

    计算机以比特序列存储数据,可寻址的最小内存块称位“字节(byte)”,存储的基本单元称为”字(word)“。
    类型决定了数据所占的比特数以及该如何解释这些比特的内容,规定了其对象的存储要求和所能执行的操作。类型分为常量和非常量。

    C++算术类型(arithmetic type)的尺寸在不同的机器上有所差别,C++标准只规定了这些算术类型的尺寸的最小值,并规定:一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大。

类型含义最小尺寸
bool布尔类型未定义
char字符8位
wchar_t宽字符16位
char16_tUnicode字符16位
char32_tUnicode字符32位
short短整型16位
int整型16位
long长整型32位
long long长整型(C++11)64位
float单精度浮点数6位有效数字
double双精度浮点数10位有效数字
long double扩展精度浮点数10位有效数字

    带符号类型和无符号类型:带符号类型(signed)可表示正数、负数和0,约定在其表示范围内正值和负值量应该平衡;无符号类型(unsigned)仅能表示大于等于0的值。
    intshortlonglong long都是带符号的,对应无符号类型位unsigned intunsigned shortunsigned longunsigned long long
字符型分charsigned charunsigned char三种。但是表现形式只有两种signedunsigned,由编译器来决定。

大多数类型支持类型转换,即一种类型的值转变为另外一种类型值:

  • 非bool型转bool类型时,初始值为0则结果为false,否则为true;
  • bool类型转非bool类型,初始值为false则结果为0,否则为1;
bool b = 42;	// b为真
int i = b;		// i = 1
  • 浮点数赋值给整数类型,结果仅保留浮点数中小数点之前的部分;
  • 整数值赋值给浮点类型时,小数部分记为0(如果整数所占空间超过浮点类型的容量有可能损失精度);
int i = 3.14;	// i = 3
double d = i;	// d = 3.0
  • 赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数;
  • 赋给带符号类型一个超出它表示范围的值时,结果是未定义的。
unsigned char c = -1;	// 假设char占8比特, c = 255
signed char c2 = 256;	// 假设char占8比特,c的值是未定义的

    字面值常量(literal)也有其对应的数据类型,由字面值常量的形式和值决定。整型字面值有十进制、八进制和十六进制三种形式,比如数值20:

20		// 十进制
024		// 以0开头的的整数代表八进制
0x14	// 以0x或0X开头代表十六进制
符号类型
十进制signedintlonglong long中能容下当前值的尺寸最小者
八进制singed或者unsignedintunsigned intlongunsigned longlong longunsigned long long中能容下当前值的尺寸最小者
十六进制singed或者unsignedintunsigned intlongunsigned longlong longunsigned long long中能容下当前值的尺寸最小者

严格来说,十进制字面值不会是负数,形如-42,负号表示对字面值取负值。类型short没有对应的字面值。
    浮点型字面值有小数表示和科学计数法表示两种形式:

3.14159 	// 小数表示
3.14159E0	// 科学计数法表示
3.14159e0	// 科学计数法表示

    单引号括起来的一个字符成为char型字面值,双引号括起来的字符称为字符串型字面值

'a'	// 字符字面值
"a"	// 字符串型字面值
""	// 字符串型字面值

    字符串型字面值的类型实际上是由常量字符构成的数组,编译器在每个字符串结尾处添加一个空字符('\0'),字符串型字面值的长度比它的内光荣多1,如:

“Hello,World!"

实际存储的内容为:

Hello,World!\0

    可以通过给字面值添加前缀或者后缀改变字面值的默认类型

字符和字符串字面值前缀含义类型
uUnicode 16字符char16_t
UUnicode32字符char32_t
L宽字符wchar_t
u8UTF-8(仅用于字符串字面值常量)char
整型字面值后缀最小匹配类型
u or Uunsigned
l or Llong
ll or LLlong long
浮点型字面值后缀类型
f或Ffloat
l或Llong double

    C++中有两类字符不能直接使用:不可打印字符和有特殊含义的字符。使用时需要用转义序列代替。转义已反斜线开头,后紧跟一个字符,或者不多于3个八进制数,或者字母x加上1个十六进制数。

字符转移序列字符转移序列字符转移序列
换行符\n回车符\r报警(响铃符)\a
纵向制表符\v横向制表符\t双引号\"
反斜线\\退格符\b单引号\’
问号\?进纸符\f

    布尔字面值有两个:truefalse
    指针指面值nullptr,可用来初始化一个空指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值