本文内容: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();
}

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐