从零开始学Visual C++
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 基本数据类型

C++是一种数据类型严格的语言,计算机根据数据类型分配对应大小的内存空间,C++内置有几种基本的数据类型,掌握这些基本类型后,可以通过结构体(struct)和类(class)创建自定义类型。

1.2.1 整型int

int类型用来存放整数(integer),一个int类型变量通常占用4个字节(byte),具体大小在不同平台上可能不同。计算机使用二进制方式存储数据,类似10001000,一个0或1占用1位(bit),一个字节占用8位,int类型变量占用32位,范围为-231~231

修饰符short表示短整型,如short int a=123;占用2个字节,范围为-215~215,short等同于short int。修饰符long表示长整型,如long int a=12345678;占用4个字节,long等同于long int。

默认int类型有正负符号,使用修饰符unsigned表示无符号,如unsigned int a=12345678;范围为0~232,无符号修饰符unsigned对float、double、char同样适用。

【实例1-2】输出未赋值和赋值后的整型变量的值。

        #include <iostream>
        using namespace std;
        int main()
        {
            int a;
            cout<<"未赋初值 a="<<a<<endl;          //输出系统随机分配的值
            a=123;
            cout<<"赋值后   a="<<a<<endl;          //输出新值
            return 0;
        }

编译运行,结果如图1-4所示。若未赋初值,系统随机分配一个初始值,为安全起见,建议声明变量同时赋初值,如int a=0;

图1-4 整型变量

1.2.2 浮点型float、double

浮点型用来存放小数,float表示单精度,占用4个字节,精度约为7位。double表示双精度,占用8个字节,精度约为15位。可使用科学计数法,例如小数0.0000123可表示为1.23e-5, e代表指数值(exponent),e-5即10的-5次方。C++默认将浮点数值当做double类型,例如数字1默认为int类型,1.0默认为double类型,若用float类型表示,可加上后缀f如1.0f。

【实例1-3】输出两个整数相除的值,以及小数与整数相除的值。

        #include <iostream>
        using namespace std;
        int main()
        {
            double d1=1/7;                        //两个整数相除
            double d2=1.0/7;                      //浮点数除以整数
            cout<<"1/7 = "<<d1<<endl;
            cout<<"1.0/7 = "<<d2<<endl;
            return 0;
        }

编译运行,如图1-5所示。两个int类型相除得到的仍然是一个整型数,浮点数与整型数相除,整型数自动转换为浮点数,得到一个浮点值。

图1-5 浮点运算

Tips 若期望得到两个int类型变量相除的浮点结果,应先将其中一个变量强制转换为浮点类型。

1.2.3 字符型char

字符型char用来存放一个字符(character),占用1个字节,范围为-27~27,用两个单引号' '包括一个字符,如字母、数字、符号等。每个char字符对应有一个ASCII值,将char类型转换为int类型,得到的是char字符的ASCII值,同理,将int型转为char类型,得到的是ASCII值对应的字符。

【实例1-4】输出字符'0'对应的ASCII值,以及ASCII值0对应的字符。

        #include <iostream>
        using namespace std;
        int main()
        {
            char ch='0';
            int a=ch;
            cout<<"字符'0'对应的值:"<<a<<endl;         //输出字符’0’对应的值
            ch=0;
            cout<<"值0对应的字符为:"<<ch<<endl;        //输出值0对应的字符
            return 0;
        }

编译运行,结果如图1-6所示。字符'0'对应的ASCII值为48,ASCII值0对应的字符为'\0','\0'是一个转义字符,常作为字符串结束标志,类似有'\n'表示换行,'\\'表示一个\。

图1-6 字符类型

1.2.4 布尔型bool

布尔型bool用于逻辑判断,只有两个值true和false。布尔型和其他类型可以转换,0代表false,所有非0数值代表true,将bool值转为整数时,true为1,false为0。

【实例1-5】输出浮点值转换得到的bool值,以及false值。

        #include <iostream>
        using namespace std;
        int main()
        {
            double d=0.0001;
            bool b1=d;
            bool b2=false;
            cout<<"0.0001 -> "<<b1<<endl;                 //double转为bool
            cout<<"false  -> "<<b2<<endl;                 //输出bool
            return 0;
        }

编译运行,结果如图1-7所示。

图1-7 bool类型

1.2.5 宽字符型wchar t

宽字符型wchar_t用于表示世界上所有的字符,全世界有广泛的语种,如中文、韩文、日文、阿拉伯文等,char类型只能表示200多个基本字符,因而出现了ANSI和Unicode两种字符集,ANSI对应char单字节类型,Unicode对应wchar_t双字节类型。Unicode采用双字节编码可以表示世界上所有的字符,更具通用性。

【实例1-6】输出字符'a'、'爱'对应的值,以及char和wchar_t占用的字节数。

        #include <iostream>
        using namespace std;
        int main()
        {
            wchar_t wch1='a';                             //英文字符'a'
            wchar_t wch2='爱';                            //中文字符'爱'
            cout<<wch1<<endl;
            cout<<wch2<<endl;
            cout<<"char "<<sizeof(char)<<endl;            //char大小
            cout<<"wchar_t "<<sizeof(wchar_t)<<endl;      //wchar_t大小
            return 0;
        }

编译运行,结果如图1-8所示。中文字符'爱'对应的值超出了char的范围,需要用wchar_t类型表示。运算符sizeof可以得到某一数据类型或变量占用的字节数,char为1个字节,wchar_t为2个字节。

图1-8 wchar_t类型