Qt6数据类型-qint8、quint8、qint16、quint16、qint32、quint32、qint64、quint64、uint、qlonglong、uchar、double
·
本文内容:Qt6数值类型取值范围的例子、Qt6使用的基本数据类型、C++基本数据类型、还有一个比较好的例子(重点重点重点)
1.七种基本的 C++ 数据类型
| 类型 | 关键字 |
|---|---|
| 布尔型 | bool |
| 字符型 | char |
| 整型 | int |
| 浮点型 | float |
| 双浮点型 | double |
| 无类型 | void |
| 宽字符型 | wchar_t |
其实 wchar_t 是这样来的:
typedef short int wchar_t;
2.类型的变量所能存储的最大值和最小值
| 类型 | 位 | 范围 |
|---|---|---|
| char | 1 个字节 | -128 到 127 或者 0 到 255 |
| unsigned char | 1 个字节 | 0 到 255 |
| signed char | 1 个字节 | -128 到 127 |
| int | 4 个字节 | -2147483648 到 2147483647 |
| unsigned int | 4 个字节 | 0 到 4294967295 |
| signed int | 4 个字节 | -2147483648 到 2147483647 |
| short int | 2 个字节 | -32768 到 32767 |
| unsigned short int | 2 个字节 | 0 到 65,535 |
| signed short int | 2 个字节 | -32768 到 32767 |
| long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
| signed long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
| unsigned long int | 8 个字节 | 0 到 18,446,744,073,709,551,615 |
| float | 4 个字节 | 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字) |
| double | 8 个字节 | 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字) |
| long double | 16 个字节 | 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。 |
| wchar_t | 2 或 4 个字节 | 1 个宽字符 |
- 不同平台所占字节数

3.Qt中使用的数据类型
| 类型 | 描述 |
|---|---|
| qint8 | char |
| qint16 | short int |
| qint32 | int |
| qint64 | long long int |
| qintptr | 整数类型,用于表示带符号整数中的指针(用于散列等)。qint32 或 qint64 的类型定义 |
| qlonglong | long long int |
| qptrdiff | 用于表示指针差异的整数类型。 |
| qreal | 除非 Qt 配置了 -qreal float 选项,否则为 double 类型定义。 |
| qsizetype | 在 Qt 支持的所有平台上,该类型保证与 size_t 的大小相同。 |
| quint8 | unsigned char |
| quint16 | unsigned short |
| quint32 | unsigned int |
| quint64 | unsigned long long int |
| quintptr | 用于在无符号整数中表示指针的整数类型(用于散列等)。quint32 或 quint64 的类型定义 |
| qulonglong | unsigned long long int |
| uchar | unsigned char. |
| uint | unsigned int. |
| ulong | unsigned long. |
| ushort | unsigned short. |
| float | 单精度 |
| double | 双精度 |
4.占用字节数计算API
//获取字节大小
sizeof(T)
#include <limits>
//获取某类型的最大值
std::numeric_limits<T>::max()
//获取某类型的最小值
std::numeric_limits<T>::min()
//打印
#include <QtDebug>
qDebug()<<"size:"<<sizeof(T)<<"max:"<<std::numeric_limits<T>::max()<<"min:"<<std::numeric_limits<T>::min();
//输出数据类型
qDebug()<<typeid(T).name()
//帮助偷懒的gcc输出变量名
# if defined(__GNUC__)
char* real_name = abi::__cxa_demangle(typeid(T).name(), nullptr, nullptr, nullptr);
free(real_name);
# else
std::cout << typeid(T).name();
# endif
5.实现打印变量类型、字节数、最大值、最小值的例子
例子是最好的老师(精心编写,这是重点)
1.打印数据类型最大值和最小值
2.实现一个函数打印最大值最小值
3.实现一个类打印大最值最小值
答案
#include <QCoreApplication>
#include <QtGlobal>
#include <limits>
#include <QtDebug>
#include <cxxabi.h>
template<typename T>
void showRange(T *t)
{
qDebug()<<typeid(T).name()<<"size:"<<sizeof(T)<<"max:"<<std::numeric_limits<T>::max()<<"min:"<<std::numeric_limits<T>::min();
}
template <class T>
class check
{
public:
T m_t;
check()
{
//因为gcc打印不出变量的全名称,所以需要添加下面的代码,vc++没有这个问题
# if defined(__GNUC__)
char* real_name = abi::__cxa_demangle(typeid(T).name(), nullptr, nullptr, nullptr);
qDebug()<<real_name<<"size:"<<sizeof(T)<<"max:"<<std::numeric_limits<T>::max()<<"min:"<<std::numeric_limits<T>::min();
free(real_name);
# else
qDebug()<<typeid(T).name()<<"size:"<<sizeof(T)<<"max:"<<std::numeric_limits<T>::max()<<"min:"<<std::numeric_limits<T>::min();
# endif
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
#if 0 //改成1打开
//最low的方式
qDebug()<<"quint32 "<<"max:"<<std::numeric_limits<quint32>::max()<<"min:"<<std::numeric_limits<quint32>::min();
//稍微优雅的方式
quint32 i;
showRange(&i);
#endif
//最牛的方式
check<quint8> uit1;
check<quint16> uit2;
check<quint32> uit3;
check<quint64> uit4;
check<qint8> it1;
check<qint16> it2;
check<qint32> it3;
check<qint64> it4;
return a.exec();
}
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)