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();
}
更多推荐
已为社区贡献3条内容
所有评论(0)