• 002 CppPrimer基本内置类型


    头文件Dog.h

    class Dog
    {
    
    };

    main.cpp文件

    #include<iostream>
    #include"Dog.h"
    using namespace std;
    int main()
    {
        int a;
        Dog b;
        cout << "测试" << endl;
        system("pause");
        return 0;
    }

    句子int a;中,之所以能用int直接定义一个整型对象a,是因为库文件中已经定义好了定义整型对象的整型类。

    而对象b库文件中没有定义,只能自己定义类。

    C++基本内置类型

    类型               含义              机器字                        最小存储空间

    bool             布尔型                                                   -

    char            字符型                                                16位二进制位

    wchar_t            宽字符型                                        16位二进制位

    short             短整型             半个机器字                 16位二进制位

    int            整型                      1个机器字                  16位二进制位

    long            长整型             1个或2个机器字             32位二进制位

    float            单精度浮点型                                          6位有效数字

    double            双精度浮点型                                      10位有效数字

    long double            扩展双精度浮点型                        10位有效数字

    void类型

    表示没有返回值。

    void可以用来声明一个空指针。

    void *p;

    注解:

    1. bool型也是整型。c++标准没有规定用几个二进制位去存储,1、2、8位都有可能。
    2. C++基本内置类型里面列的前6行都属于整型,是用来存放整数的,后3行属于浮点型,浮点型是用来保存小数的。
    3. sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(longlong)。
    4. 一般各家的C++编译器都会做的比c++国际标准中的最小占据位数都要多一些。
    5. 这些数据类型,默认都是有符号的。

     测试一下在微软windows系统上,这些类的对象最小占据几个2进制位?

    main.cpp如下:

    #include<iostream>
    using namespace std;
    int main()
    {
        void *p;
        int a;
        cout << "测试:" << endl;
        cout << "在windows系统中,bool占据" << sizeof(bool) << "个字节。" << endl;
        cout << "在windows系统中,char占据" << sizeof(char) << "个字节。" << endl;
        cout << "在windows系统中,wchar_t占据" << sizeof(wchar_t) << "个字节。" << endl;
        cout << "在windows系统中,short占据" << sizeof(short) << "个字节。" << endl;
        cout << "在windows系统中,int占据" << sizeof(int) << "个字节。" << endl;
        cout << "在windows系统中,long占据" << sizeof(long) << "个字节。" << endl;
        cout << "在windows系统中,long long占据" << sizeof(long long) << "个字节。" << endl;
        cout << "在windows系统中,float占据" << sizeof(float) << "个字节。" << endl;
        cout << "在windows系统中,double占据" << sizeof(double) << "个字节。" << endl;
        cout << "在windows系统中,long double占据" << sizeof(long double) << "个字节。" << endl;
        system("pause");
        return 0;
    }

    运行结果:

    注解:

    1. 普通的char类的变量只能保存英文字符。
    2. 宽字符类wchar_t类型的变量能保存中文、日文等非英文字符。
    3. int跟电脑的cpu字长有关,如果cpu字长是32位的,则int占据4个字节二进制长度。如果cpu字长是64位的,则int占据8个字节二进制长度。如果某一数据类型的对象所占据的二进制位数跟电脑的cpu字长一致,则这种类型的数据处理速度最快。
    4. 另:在32位机器和64机器中int类型都占用4个字节,编译器可以根据自身硬件来选择合适的大小。

    字符型和宽字符型变量或者对象实际上里面保存的是整数。

    • char类型的字符串对象。

    因为它的长度分配是1个字节,即8位,所以它只能保存英文字符。不能保存中文字符(非英文字符)。

    #include<iostream>
    using namespace std;
    int main()
    {
        char c;
        c = 'A';
        cout << c << endl;
        printf("%d
    ",c);
        wchar_t c2;
        c2 = ''; 
        cout << c2 << endl;
        system("pause");
        return 0;
    }

    注解:

    1. 在电脑里面,一切都是数(0和1组成的数)。'A'是65.
    • bool型对象
    #include<iostream>
    using namespace std;
    int main()
    {
        bool a;
        bool b;
        bool c;
        a = true;
        b = false;
        c = 39;  //  布尔型中,非零就是1
        cout << "布尔a是:" << a << endl;
        cout << "布尔b是:"<<b << endl;
        cout << "布尔c是:" << c << endl;
        system("pause");
        return 0;
    }

     注解:

    1. bool类型的对象也是数。
    •  有符号和无符号数值类型的取值范围,以char类型为例
    #include<iostream>
    using namespace std;
    int main()
    {
        int a;
        short b;
        long c;
        
        a = -12;
    
        unsigned int a2;
        unsigned short b2;
        unsigned long c2;
    
        char m;
    
        unsigned char m2;  
        /*
        8位二进制,能用0、1表示2的8次方个数,0~255
        */
        signed char m3;  
        /*
        一般把最高位设定为符号位,1表示负,0表示正;
        2的7次方可以表示128个数, -128(涉及到补码知识)~127
        */    
        printf("SCHAR_MIN:%d
    ", SCHAR_MIN);   //signed char最小值 
        printf("SCHAR_MAX:%d
    ", SCHAR_MAX);   //signed char最大值 
        printf("UCHAR_MAX:%d
    ", UCHAR_MAX);   //unsigned char最大值
    
        system("pause");
        return 0;
    }

     注解:

    1. char类型的表示范围是为何不是-127~127,而是-128~127,参考:https://www.cnblogs.com/yibeimingyue/p/13382632.html

    main.cpp如下:

    #include<iostream>
    using namespace std;
    int main()
    {
        unsigned char m2;  
        m2 = -1;
        printf("m2=%d
    ",m2);
        system("pause");
        return 0;
    }

     注解:

    为何是255?为何打出来不是-1?

    原因:m2定义的是无符号字符型(整型),但是赋值的时候赋值能有符号的-1了,数字在计算机中都是以补码的形式存储的,-1在计算机中的存储形式是:1111 1111(8个1)(见下图的原码-反码-补码表),它会被当成无符号的补码,无符号的话,补码和原码相同,所以原码是1111 1111的话,化成十进制就是255.

    •  浮点型对象
    #include<iostream>
    using namespace std;
    int main()
    {
        float f = 1234567890123456789.0123456789;
        printf("%f
    ",f);
        system("pause");
        return 0;
    }

     注解:

    前7位是准确的,所以在微软c++浮点型数据对象只有7个有效数字(国际标准中要求最小6位有效数字)。

    #include<iostream>
    using namespace std;
    int main()
    {
        double f = 1234567890123456789.0123456789;
        printf("%f
    ",f);
        system("pause");
        return 0;
    }

    注解:

    前17位是准确的,所以在微软c++双精度型数据对象有17个有效数字(国际标准中c++要求最小10位有效数字)。

    #include<iostream>
    using namespace std;
    int main()
    {
        long double f = 1234567890123456789.0123456789;
        printf("%f
    ",f);
        system("pause");
        return 0;
    }

    注解:

    1. 前17位是准确的,所以在微软c++ long double型数据对象仍然有17个有效数字(国际标准中c++要求最小10位有效数字)。
    2. double 的有效数字已经足够存储带小数点的大数。
    3. float 和 double类的对象主要就是用来保存带小数点的小数的,主要不是用来保存带小数点的很大的大数的。如果保存很大的整数,long long , long ,int就可以。
    4. 整型数据存取速度很快,浮点型数据存取速度很慢。
    #include<iostream>
    using namespace std;
    int main()
    {
        long double f = 9.0123456789;
        printf("%f
    ",f);
        system("pause");
        return 0;
    }

    注解:

    double或者long double型对象存储7位有效数字(?)。

    总结:

    1. 定义整型对象一般用int
    2. 定义小数一般用double,它比float型对象的存取还要快。
  • 相关阅读:
    腾讯为什么会出Q立方浏览器?
    String,StringBuffer与StringBuilder的区别??
    Linux Socket编程(不限Linux)
    将div显示在屏幕正中央
    计算鼠标坐标是否在指定范围内
    正则
    ajax异步通信
    CSS Float 换行
    jQuery强大的jQuery选择器
    给display字段增加筛选功能
  • 原文地址:https://www.cnblogs.com/yibeimingyue/p/13380577.html
Copyright © 2020-2023  润新知