C++数据修饰符
数据符号修饰符
修饰符 | 说明 |
---|---|
signed | 有符号类型(若省略则此为默认) |
unsigned | 无符号类型 |
注意:unsigned不能够修饰浮点类型
浮点类型由符号位、指数偏移值和分数值三部分组成,不支持整体位移运算,而unsigned标识符号位也用于存放数据,两者相互矛盾,编译器对此行为不同,其结果不可预期。
数据类型修饰符
Integer types
对于int类型,主要有short和long两种修饰符。
数据模型:基本类型大小的选择实现统称为数据模型。
LP32、ILP32、LLP64和LP64四种数据模型被广泛采纳。
32位系统:
- LP32(2/4/4):int宽度为16位,long和指针的宽度都是32位
Win16 API - ILP32(4/4/4):int、long和指针的宽度都是32位
Win32 API、Unix和类Unix系统(Linux、Mac OS X等)
64位系统:
- LLP64(4/4/8):int和long的宽度为32位,指针宽度是64位
Win64 API - LP64(4/8/8):int宽度为32位,long和指针的宽度都是64位
Unix和类Unix系统(Linux、Mac OS X等)
指针宽度与系统位数相关,以支持访问系统位数对应的地址范围,避免损失地址数据。
不同数据模型对应修饰符的宽度(位数)有所不同:
修饰符 | LP32 | ILP32 | LLP64 | LP64 | C++ standard |
---|---|---|---|---|---|
short | 16 | 16 | 16 | 16 | at least 16 |
int | 16 | 32 | 32 | 32 | at least 16 |
long | 32 | 32 | 32 | 64 | at least 32 |
long long | 64 | 64 | 64 | 64 | at least 64 |
参考资料
[1] Fundamental types. https://en.cppreference.com/w/cpp/language/types. 2018-12-02