C++基本内置类型

算术类型

算术类型分为两类

  1. 整型(integral type),包括字符和布尔型在内
  2. 浮点型

算术类型的尺寸(该类型数据所占的比特数)在不同机器上有所差别,C++ 标准规定了尺寸的最小值,同时允许编译器赋予这些类型更大的尺寸。某一类型所占的比特数不同,他所能表示的数据范围也不同。

类型含义最小尺寸说明
bool布尔类型未定义取值为真(true)或假(false)
char字符8 位一个 char 的空间应确保可以存放机器基本字符集中任意字符对应的数字值
wchar_t宽字符16 位用于扩展字符集,确保可以存放机器最大扩展字符集中的任意一个字符
char16_tUnicode字符16 位用于扩展字符集,为 Unicode 字符集服务
char32_tUnicode 字符32 位用于扩展字符集,为 Unicode 字符集服务
short短整型16 位
int整型16位一个 int 至少和 一个 short 一样大
long长整型32 位一个 long 至少和一个 int 一样大
long long长长整型64 位C++11 中新定义,一个 long long 至少和 一个 long 一样大
float单精度浮点数6 位有效数字
double双精度浮点数10 位有效数字
long double扩展精度浮点数10 位有效数字常常用于有特殊浮点需求的硬件

其他说明

除字符和布尔类型之外,其他整型用于表示(可能)不同尺寸的整数
C++标准指定了一个浮点数有效位数的最小值,然而大多数编译器都实现了更高的精度

在VS2017中测试各类型的大小

sizeof(bool) 1
sizeof(char) 1
sizeof(wchar_t) 2
sizeof(char16_t) 2
sizeof(char32_t) 4
sizeof(short) 2
sizeof(int) 4
sizeof(long) 4
sizeof(long long) 8
sizeof(float) 4
sizeof(double) 8
sizeof(long double) 8

各类型取值范围
C++标准规定:

一个浮点数的有效位数的最小值,但是大多数的编译器都实现了更高的精度。通常:float以1个字(32比特)来表示,double以2个字(64比特)来表示,long double用以3或者4个字(96或者128比特)来表示一般来说float类型和double类型分别有7 和16位有效数字。了诶性long double常常用于有特殊浮点要求的硬件。它的具体实现不同,精度也各不相同。
在这里插入图片描述

#include <stdio.h>
#include <limits.h>
#include <float.h>

int main()
{
	printf("char类型的变量存储值从%d到%d\n", CHAR_MIN, CHAR_MAX);

	printf("unsigned char类型的变量存储值从0到%u\n", UCHAR_MAX);

	printf("short类型的变量存储值从%d到%d\n", SHRT_MIN, SHRT_MAX);

	printf("unsigned short类型的变量存储值从0到%u\n", USHRT_MAX);

	printf("int类型的变量存储值从%d到%d\n", INT_MIN, INT_MAX);

	printf("unsigned int类型的变量存储值从0到%u\n", UINT_MAX);

	printf("long类型的变量存储值从%ld到%ld\n", LONG_MIN, LONG_MAX);

	printf("unsigned long类型的变量存储值从0到%lu\n\n", ULONG_MAX);

	printf("long long类型的变量存储值从%lld到%lld\n", LLONG_MIN, LLONG_MAX);

	printf("unsigned long long类型的变量存储值从0到%llu\n", ULLONG_MAX);

	printf("最小的非零float类型变量的值的是%.3e\n", FLT_MIN);

	printf("最大的float类型变量的值的是%.3e\n", FLT_MAX);

	printf("最小的非零double类型变量的值的是%.3e\n", DBL_MIN);

	printf("最大的double类型变量的值的是%.3e\n\n", DBL_MAX);

	printf("最小的非零long double类型变量的值的是%.3Le\n", LDBL_MIN);

	printf("最大的long double类型变量的值的是%.3Le\n", LDBL_MAX);

	printf("float类型的变量提供%u位精度的小数位数\n", FLT_DIG);

	printf("double类型的变量提供%u位精度的小数位数\n\n", DBL_DIG);

	printf("long double类型的变量提供%u位精度的小数位数\n", LDBL_DIG);
}
字面值常量

面值常量(literal),每个字面值常量都对应一种数据类型,其形式和值决定了它的数据类型。

整型字面值
整型字面值可以写作十进制数、八进制数、十六进制数的形式。下边表格展示了如何用上面的三种进制表示数值 20

进制示例说明默认类型无/带符号
十进制20int, long, long long 中的尺寸最小的能容纳下的带符号数
八进制024以 0 开头的整数int, long, long long 与它们相对应的 unsigned 类型两者皆有
十六进制0x14以 0x 或 0X 开头的整数int, long, long long 与它们相对应的 unsigned 类型两者皆有

如果一个字面值连与之关联的最大的数据类型都放不下,将产生错误。类型 short 没有对应的字面值。

浮点型字面值
浮点型字面值表现为一个小数或以科学技术法表示的指数,其中指数用 E 或 e 标识:

3.14159
3.14159E0
0.
0e0
.001

默认的,浮点型字面值是一个 double

字符和字符串字面值
由单引号括起来的一个字符称为 char 型字面值,双引号括起来的零个或多个字符则构成字符串型字面值。

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

转义序列
有两类字符程序员不能直接使用

不可打印(nonprintable)的字符,如退格或其他控制字符,因为它们没有可视的图符
在 C++ 中有特殊含义的字符(单引号,双引号,问号,反斜线),在这种情况下需要用到转义序列(escape sequence)
转义序列均以反斜线作为开始,C++ 语言规定的转义序列包括:

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

指定字面值的类型
如下表中所列的前缀和后缀,可以改变整型、浮点型和字符型字面值的默认类型

字符串和字符串字面值

前缀含义类型
uUnicode 16 字符char16_t
UUnicode 32 字符char32_t
L宽字符wchar_t
u8UTF-8(仅用于字符串字面值常量)char

整型字面值

后缀最小匹配类型
u or Uunsigned
l or Llong
ll or LLlong long

浮点型字面值

后缀类型
f or Ffloat
l or Llong double
	wchar_t w = L'a';
	std::string s = u8"hi";
	unsigned long long ull = 42ULL;
	float f = 1E-3F;
	long double ld = 3.14159L;

布尔字面值和指针字面值
true 和 false 是布尔类型的字面值

nullptr 是指针字面值(C++ 11 新标准,最好使用这个,而避免使用 NULL)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值