Qt入门系列开发教程【数据类型篇】数值类型
        【摘要】 
                    
                        
                    
                     
 来了,老弟,不收藏你就后悔吧 !****点赞👍收藏⭐️留言📝 不迷路~~~ 
 
 
 😈「作者主页 」:鱼酱2333 😈「 B站首页 」:鱼酱2333 😈「本文录入专栏」:Qt入门系列开...
    
    
    
    来了,老弟,不收藏你就后悔吧 !****点赞👍收藏⭐️留言📝 不迷路~~~
😈「作者主页 」:鱼酱2333
😈「 B站首页 」:鱼酱2333
😈「本文录入专栏」:Qt入门系列开发教程
😈「本文内容」:Qt数值类型取值范围的例子、Qt6使用的基本数据类型、C++基本数据类型、输出取值范围和字节数的例子。
1.Qt数据类型
类型定义部分是基本类型的便利定义(其中一些保证 Qt 支持的所有平台上的某些位大小),部分类型与 Qt 消息处理相关。 这些功能与生成消息、Qt 版本处理以及比较和调整对象值有关。 最后,一些声明的宏使程序员能够将编译器或平台特定的代码添加到他们的应用程序中,而另一些则是用于更大操作的便利宏。
2. C++ 数据类型及范围
| 类型 | 关键字 | 
|---|---|
| 布尔型 | bool | 
| 字符型 | char | 
| 整型 | int | 
| 浮点型 | float | 
| 双浮点型 | double | 
| 无类型 | void | 
| 宽字符型 | wchar_t | 
其实 wchar_t 是这样来的:
typedef short int wchar_t;
  
 - 1
- 2
- 3
| 类型 | 位 | 范围 | 
|---|---|---|
| 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.Qt占用字节数计算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
  
 - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
5.Qt实现打印变量类型、字节数、最大值、最小值的例子
实现如下功能:
- 打印数据类型最大值和最小值
- 实现一个函数打印最大值最小值
- 实现一个类打印大最值最小值
  
 - 1
- 2
- 3
- 4
答案
#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();
}
  
 - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
文章来源: yujiang.blog.csdn.net,作者:鱼酱2333,版权归原作者所有,如需转载,请联系作者。
原文链接:yujiang.blog.csdn.net/article/details/122409280
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
            
 
           
评论(0)