本文内容:Qt6数值类型取值范围的例子、Qt6使用的基本数据类型、C++基本数据类型、还有一个比较好的例子(重点重点重点)

1.七种基本的 C++ 数据类型

类型关键字
布尔型bool
字符型char
整型int
浮点型float
双浮点型double
无类型void
宽字符型wchar_t
其实 wchar_t 是这样来的:

typedef short int wchar_t;

2.类型的变量所能存储的最大值和最小值

类型范围
char1 个字节-128 到 127 或者 0 到 255
unsigned char1 个字节0 到 255
signed char1 个字节-128 到 127
int4 个字节-2147483648 到 2147483647
unsigned int4 个字节0 到 4294967295
signed int4 个字节-2147483648 到 2147483647
short int2 个字节-32768 到 32767
unsigned short int2 个字节0 到 65,535
signed short int2 个字节-32768 到 32767
long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int8 个字节0 到 18,446,744,073,709,551,615
float4 个字节精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字)
double8 个字节双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字)
long double16 个字节长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。
wchar_t2 或 4 个字节1 个宽字符
  • 不同平台所占字节数
    在这里插入图片描述

3.Qt中使用的数据类型

类型描述
qint8char
qint16short int
qint32int
qint64long long int
qintptr整数类型,用于表示带符号整数中的指针(用于散列等)。qint32 或 qint64 的类型定义
qlonglonglong long int
qptrdiff用于表示指针差异的整数类型。
qreal除非 Qt 配置了 -qreal float 选项,否则为 double 类型定义。
qsizetype在 Qt 支持的所有平台上,该类型保证与 size_t 的大小相同。
quint8unsigned char
quint16unsigned short
quint32unsigned int
quint64unsigned long long int
quintptr用于在无符号整数中表示指针的整数类型(用于散列等)。quint32 或 quint64 的类型定义
qulonglongunsigned long long int
ucharunsigned char.
uintunsigned int.
ulongunsigned long.
ushortunsigned 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

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

更多推荐