C++内置类型与Qt内置类型汇总
基本描述
数据类型描述了数值的表示法、解释和结构,并以算法操作。C++中数据类型分为内置类型和扩展类型两大类。内置类型就是c++语言本身提供的基本数据类型,比如,整型数,浮点数,字符,布尔值等等。而扩展类型则是c++语言根据基本类型扩展出的其他类型。
机器中的数据类型
所有在电脑中,基于数字电子学的底层数据,都是以比特(0 或 1)表示。其中数据的最小的定址单位,称为字节(通常是八比特,以八个比特为一组)。机器码指令处理的单位,称作字长(至 2007 年止,一般为 32 或 64 比特)大部分对字长的指令解译,主要以二进制为主,如一个 32 比特的字长,可以表示从 0 至 232-1 的无符号整数值,或者表示从 -231 至 231-1 的有符号整数值。存在着特殊的算术指令,对字长中的比特使用不同的解释,以此作为浮点数。
数值范围
每一个数据类型都有一个数值上的最大和最小值,称作数值范围。当使用较小的类型时,只能存储范围之内的数值。试图存储一个超出其范围的数值,可能会导致编译或运行错误,或者不正确的计算结果(因为被截断)。
一个变量的范围,是基于用以保存数值的字节数目,而且整数数据类型通常能够存储 2n 数值(n指的是比特)。对于其它的数据类型(例如,浮点数),其数值范围更为复杂,且几乎取决于所使用的存储方法。
bit与byte的区别
bit
- “bit”是原子的
- 最小的存储单位 一个位只存储0或1
- 在计算机中它全是0和1位
- 任何具有两个独立状态的东西都可以存储在1个bit
- 在芯片中:电荷= 0/1
- 在硬盘中:北/南磁场的点= 0/1
- 一个bit有点太小无法广泛使用
- 将8位组合在一起以产生1个字节
- 计算机中的所有内容都是0和1。该位只存储0或1:它是存储的最小构建块。
Byte
- 一个byte= 8个bit
- 例如0 1 0 1 1 0 1 0
- 一个字节可以存储一个字符,例如’A’或’x’或’$’机器字长
机器字长
机器字长是指计算机进行一次整数运算所能处理的二进制数据的位数(整数运算即定点整数运算)。机器字长也就是运算器进行定点数运算的字长,通常也是CPU内部数据通路的宽度。即字长越长,数的表示范围也越大,精度也越高。机器的字长也会影响机器的运算速度。倘若CPU字长较短,又要运算位数较多的数据,那么需要经过两次或多次的运算才能完成,这样势必影响整机的运行速度。
C++内置数据类型
数据类型名称 | 类别 | 字节数 | 别名 | 取值范围 | 内容 |
---|---|---|---|---|---|
int | 整数 | * | signed,signed int | 由操作系统决定,即与操作系统的"字长"有关 | int类型是大于或等于short int类型的大小但小于或等于long类型的大小的整数类型。int类型的对象可声明为signed int或unsigned int。Signed int是int的同义词。 |
unsigned int | * | unsigned | 由操作系统决定,即与操作系统的"字长"有关 | ||
__int8 | 整数 | 1 | char,signed char | –128 到 127 | 固定大小的整数 __int“n,其中 n 是整数变量的大小(以比特为单位)。 |
__int16 | 整数 | 2 | short,short int,signed short int | –32,768 到 32,767 | 固定大小的整数 __int“n,其中 n 是整数变量的大小(以比特为单位)。 |
__int32 | 整数 | 4 | signed,signed int | –2,147,483,648 到 2,147,483,647 | 固定大小的整数 __int“n,其中 n 是整数变量的大小(以比特为单位)。 |
__int64 | 整数 | 8 | 无 | –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 固定大小的整数 __int“n,其中 n 是整数变量的大小(以比特为单位)。 |
bool | 整数 | 1 | 无 | false 或 true | bool 类型是可以具有 true 或 false 这两个值之一的整数类型。 其大小未指定。 |
char | 整数 | 1 | signed char | –128 到 127 | 类型 char 是通常包含基本执行字符集成员的整数类型 - 默认情况下,这是 Microsoft C++ 中的 ASCII。C++ 编译器将 char、signed char 和 unsigned char 类型的变量视为不同类型。char 类型的变量将提升到 int,就像它们在默认情况下是 signed char 类型一样,除非使用 /J 编译选项。 在这种情况下,它们被视为 unsigned char 类型并提升为 int(没有符号扩展)。 |
unsigned char | 1 | 无 | 0 到 255 | ||
short | 整数 | 2 | short int,signed short int | –32,768 到 32,767 | short int 类型(或 short)是大于或等于 char 类型的大小但小于或等于 int 类型的大小的整型类型。short 类型的对象可声明为 signed short 或 unsigned short。Signed short 是 short 的同义词。 |
unsigned short | 2 | unsigned short int | 0 到 65,535 | ||
long | 整数 | 4 | long int,signed long int | –2,147,483,648 到 2,147,483,647 | long 类型(或 long int)是大于或等于 int 类型的大小的整数类型。long 类型的对象可声明为 signed long 或 unsigned long。Signed long 是 long 的同义词。 |
long long | 整数 | 8 | none (but equivalent to __int64) | –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 大于无符号 long。long long 类型的对象可声明为 signed long long 或 unsigned long long。Signed long long 是 long long 的同义词。 |
unsigned long | 4 | unsigned long int | 0 到 4,294,967,295 | ||
enum | * | 无 | 由操作系统决定,即与操作系统的"字长"有关 | ||
float | 浮点 | 4 | 无 | 3.4E +/- 38 (7 digits) | float 类型是最小的浮点类型。 |
double | 浮点 | 8 | 无 | 1.7E +/- 308 (15 digits) | double 类型是大于或等于 float 类型的大小但小于或等于 long double 类型的大小的浮点类型。 |
long double | 浮点 | 8 | 无 | 1.7E +/- 308 (15 digits) | long double 类型是大于或等于 double 类型的浮点类型。 |
wchar_t | 整数 | 2 | __wchar_t | 0 到 65,535 | wchar_t 类型的变量指定宽字符或多字节字符类型。 默认情况下,wchar_t 是本机类型,但可以使用 /Zc: wchar_t- 使 wchar_t 成为 unsigned short 的 typedef。__wchar_t 类型是本机 wchar_t 类型的 Microsoft 专用同义词。在字符或字符串文本前使用 L 前缀可指定宽字符类型。 |
Microsoft C++ 中的基础类型所需的存储量。
类型 | 大小 |
---|---|
bool, char, unsigned char, signed char, __int8 | 1 个字节 |
__int16, short, unsigned short, wchar_t, __wchar_t | 2 个字节 |
float, __int32, int, unsigned int, long, unsigned long | 4 个字节 |
double, __int64, long double, long long | 8 个字节 |
Qt中的基本数据类型
Qt中的数据类型 | C++中的数据类型 | 描述 |
---|---|---|
qint8 | signed char | 有符号8比特数据 |
qint16 | signed short | 16位数据类型 |
qint32 | signed int | 32位有符号数据类型 |
qint64 | long long int 或(__int64) | 64位有符号数据类型,Windows中定义为__int64 |
qintptr | qint32 或 qint64 | 指针类型 根据系统类型不同而不同,32位系统为qint32、64位系统为qint64 |
qlonglong | long long int 或(__int64) | Windows中定义为__int64 |
qptrdiff | qint32 或 qint64 | 根据系统类型不同而不同,32位系统为qint32、64位系统为qint64 |
qreal | double 或 float | 除非配置了-qreal float选项,否则默认为double |
quint8 | unsigned char | 无符号8比特数据类型 |
quint16 | unsigned short. | 无符号16比特数据类型 |
quint32 | unsigned int | 无符号32比特数据类型 |
quint64 | unsigned long long int 或 (unsigned __int64) | 无符号64比特数据类型,Windows中定义为unsigned __int64 |
quintptr | quint32 或 quint64 | 根据系统类型不同而不同,32位系统为quint32、64位系统为quint64 |
qulonglong | unsigned long long int 或 (unsigned __int64). | Windows中定义为__int64 |
uchar | unsigned char | 无符号字符类型 |
uint | unsigned int | 无符号整型 |
ulong | unsigned long | 无符号长整型 |
ushort | unsigned short | 无符号短整型 |
参考资料
- https://zh.wikibooks.org/zh-hans/Java/%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B
- https://zh.wikipedia.org/wiki/%E8%B3%87%E6%96%99%E9%A1%9E%E5%9E%8B
- https://blog.csdn.net/a775992553/article/details/8790241
- https://msdn.microsoft.com/zh-cn/library/cc953fe1.aspx
- https://www.cnblogs.com/zjfdbz/archive/2013/03/15/2960930.html
- https://msdn.microsoft.com/zh-cn/library/s3f49ktz.aspx
- https://web.stanford.edu/class/cs101/bits-bytes.html