02. 数值类型+低占用类型
大约 5 分钟
02. 数值类型+低占用类型
基本类型 > 数字 > 整型、char、bool
简概
子类型与类型宽度(与C不同)
字长(注意short [int],long [int]简写)
C/C++ 有符号类型 | C/C++ 无符号类型 | 宽度(C++标准表示法) (确保最小长度) | 8/16位平台 字节数 | 32位平台 字节数 | 64位平台 字节数 | C++新增 |
---|---|---|---|---|---|---|
[signed] char | unsigned char | 1 | 1 | 1 | 否 | |
short | unsigned short | 2 | 2 | 2 | 否 | |
int | unsigned | 至少2字节,且short | 2 | 4 | 4 | 否 |
long | unsigned long | 至少4字节,且int | 4 | 4 | 8 | 否 |
longlong | unsigned long long | —— | 8 | 8 | 是 | |
char * | 2 | 4 | 8 | 否 | ||
bool | 是 | |||||
———— | ———— | ———— | ———— | ———— | —— | |
size_t | 4 | 8 | 否 | |||
int32_t | uint32_t | 4 | 4 | 否 | ||
int64_t | unint64_t | 8 | 8 | 否 | ||
wchat_t | 根据字符集而定 | 根据字符集而定 | 是 | |||
—— | char16_t | 2 | 2 | 是 | ||
—— | char32_t | 4 | 4 | 是 | ||
———— | ———— | |||||
至少4字节 | 4 | 4 | 否 | |||
至少6字节,且float | 8 | 8 | 否 | |||
double | (10、12、16) | 否 |
整型的子类型 - char补充(与C不同)
- 分类依据:关于子类型加上
char
和bool
,因为:- char可以当整型用、只是一般是用来表示字符(ASCII)罢了
- char可以用数字定义,而且也以数字存储数据
- 符号
- Java:char默认[signed] char,ASCII编码所在区域都在正数侧,占128个
- C/C++:char在默认情况下即非无符号也非有符号,是否有符号由C++实现决定
- 其他另类char类型
wchat_t
- 对于有些字符集(如日文汉字系统)无法用char表示
- 而wchar_t是一种整数类型,有足够的空间可以表示系统使用的最大扩展字符集
- 输出使用
wcin
和wcout
char16_t
和char32_t
(C++新增类型)- 类似于
int32_t
和int64_t
的存在
- 类似于
整型的子类型 - bool补充(与C不同)
- 新增
- ANSI/ISO C++标准后C++的新增类型,过去C++和C一样没有布尔类型,将非零值解释为true,将零解释为false
- 转换
- 所有数字值或指针值都可以被隐式转换(不用显式强制转换)为bool值
- 任何非零值转换为true,零转换为false
使用
字面量方式
按进制定义:与C相同,C++能使用前1~2位来标识数字常量的基数(进制数)
- 十进制:第一位1~9
- 八进制:第一位0,第二位1~7
- 16进制:前两位0x或0X
标明类型:和C一样通过后缀标明类型。在定义时意义不大,常用于不定义时直接使用数(用于选择存储常数的内存如何设置)
显式标注(带后缀)
- int:默认情况的存储,不需要额外标明
- long:
l
或L
后缀(因为l看起来像数字,一般用L) - unsigned:
u
或U
后缀 - 或者组合使用,如
ul
、ll
、ull
隐式判断(不带后缀)
不标明会自动判断,如在16位平台上(INT_MAX=32767,LONG_MIN=2147483648):
20000被表示为int,40000被表示为long,3000000000被表示为longlong
字符定义:
- 使用单引号括起来,只能有一个字符
字符转义:
- C++转义序列编码查表去,基本上编程语言的都差不多(进制转义可能有点区别),转义包括按进制转义(类似于整数的按进制定义)
符号操作
- 算术运算符:
+、-、*、/、%
,加减乘除取余,其中:- 除法运算符有三种运算:整数除法(默认为floor除法)、float除法、double除法(运算符重载)
- 求模的操作数必须都是整型
内置函数操作 - 输出(与C不同)
C++的cout提供了控制符dec、hex、oct
按进制输出:C++的cout提供了控制符dec、hex、oct
十进制:
cout << dec << n_int;
,整型默认方法(char例外)八进制:
cout << oct << n_int;
16进制:
cout << hex << n_int;
ASCII编码输出:
cout << c_char;
、cout.put();
后者是成员函数,为什么有cout.put();
?历史缘故:在Release2.0之前
cout
能处理字符变量但无法正确处理字符常量(会自动保存成int类型,而现在可以正常处理了)注意:默认输出dec(char例外),进制转换的操作是永久性的,如果是临时用的话就要改回来!
基本类型 > 数字 > 浮点型
简概
子类型与类型宽度(3种)
浮点类型 | 宽度(C++标准表示法) | 通常字节数 |
---|---|---|
float | 至少4字节 | 4 |
double | 至少6字节,且float | 6 |
long double | double | 10、12、16 |
long double
为多精度浮bai点类du型或长精度浮点类型
另外,这三种类型的指数范围至少是-37~37,可以从头文件cfloat或float.h中找到系统的限制
使用
字面量方式
- 小数的两种表示法
- 小数点方式:如:
xx.xx
- E表示法:如
xxexx
/xxe+xx
、xxe-xx
、xxExx
/xxE+xx
、xxE-xx
- 小数点方式:如:
- 标明类型:和C一样通过后缀标明类型,在定义时意义不大,常用于不定义时直接使用数(用于选择存储常数的内存如何设置)
- double:默认情况小数的存储,不需要额外标明
- float:
f
或F
后缀 - long doublw:
l
或L
后缀(因为l看起来像数字,一般用L)
符号操作
- 算术运算符:
+、-、*、/、%
,加减乘除取余,其中:- 除法运算符有三种运算:整数除法(默认为floor除法)、float除法、double除法(运算符重载)
- 求模的操作数必须都是整型
内置函数操作 - 输出(与C不同)
- 输出:通常cout会删除结尾的零,
cout.setf()
可以覆盖这种行为