zoukankan      html  css  js  c++  java
  • 《专题:C++语法基础》篇二:C++中的数据类型

    摘要:

    此文系《专题:C++语法基础》系列的第二篇,主要介绍了C++中的五种内置数据类型,包括:整型、实型、字符型、布尔型和枚举型。
    

    C++处理的每一个数据都必须指明其类型。一个数据类型就是事先做好的一个工具。
    C++可以处理的基本数据类型包括:整型、实型、字符型和布尔型,枚举型。当然,C++允许用户按自己的需求定义类型。
    以下将详细介绍C++内置的这5种数据类型:

    一、整型

    顾名思义,整型变量即是用来存储整数的。一个整形变量能存储一个整数,但存储的整数并非无限大,而是取决于整形变量在计算机中所占用的内存大小。

    1、整型数的内部表示及其允许的运算

    整型数在计算机内一般是以补码表示的。正整数的补码是它的二进制表示,负整数的补码是将他的绝对值的二进制按位取反后再加1。例如若一个以16位表示的数字10,则在内存中表示为0000000000001010,-10则表示为1111111111110110。
    在整数的补码表示中,最高位表示符号位,正数为0,负数为1。对16位表示而言,正整数表示范围为0000000000000000~0111111111111111,即0~32767。负数则为1000000000000000~1111111111111111,即-32768~-1。
    对整型数可以进行的运算包括算术运算和比较运算。当然还有输入输出运算。

    2、整型数的分类

    C++共有6种整型数据类型,其占用字节和表示范围如下:

    类型 类型名 在VS中占用空间大小 表示范围
    基本整型 int 4字节 -2^31~2^31−1
    短整型 short(int) 2字节 -2^15~2^15−1
    长整型 long(int) 4字节 -2^31~2^31−1
    无符号基本整型 unsigned(int) 4字节 0~2^32−1
    无符号短整型 unsigned short(int) 2字节 0~2^16−1
    无符号长整型 unsigned long(int) 4字节 0~2^32−1

    例子:
    两个整型数的相加

    /**
    *第2个程序:AddTwoNumber
    *功能:两个整型数的相加求结果
    *
    *@version2016.12.21
    *@author zha yongchun
    */
    
    #include<iostream>//预编译指令
    using namespace std;//使用命名空间std
    
    int main(){//主函数
        int a=10;//定义a并赋值10
        int b = 20;//定义b并赋值20
        int c ;//定义c但不赋值
        c = a + b;//对a,b进行加法运算并将结果保存在c中
        cout << "a+b="<<c<<endl;//输出
        system("pause");
        return 0;
    }

    3、整型数据的溢出

    在整型数的内部表示中,正整数的最高位为0,负正数的最高位为1。设想一个16位的整型数,其能表示的最大值为32726,若此时对该值进行加1操作,则内部的补码将由01111111111111111变为1000000000000000,由于最高位是1,C++会把这个数解释为-32728。这种情况就称为“溢出”。

    4、整型常量

    整型常量的表示包括8进制,10进制和16进制。
    8进制的整型常量常以0开头,如0123,表示10进制下的83。
    16进制以0x开头,如0x123,其表示10进制下的291。
    整型常量默认为int型的,如需指定其类型,则可在数字末尾添加L(long)或U(unsigned)。

    二、实型

    实数在计算机内常以浮点数表示,因而实型又称浮点型。

    1、实型数的内部表示及其支持的运算

    实型数在计算机内部通常表示为a*2^b,a称为尾数,b称为指数,这种形式称为浮点表示法。a表征了数的储存精度,b表征了数的大小。
    实型数可支持的运算包括算术运算和比较运算。也包括输入输出运算。

    2、实型数的分类

    C++中实型数分为三种类型,分别为:单精度(float)、双精度(double)和长双精度(long double)。

    名称 符号 占用内存 a占位数 b占位数 表示范围
    单精度 float 4 3 1 2^(−128)~2^127
    双精度 double 8 5 3
    长双精度 long double 8 5 3

    例子:求C++中基本数据类型占用的字节数和表示范围

    /*****
    *求C++数据类型中的字节长度和数据范围
    *@version20161223
    *@mail1729465178@qq.com
    *****/
    
    #include<iostream>
    #include<string>
    #include <limits>
    using namespace std;
    int main()
    {
        cout << "type: 			" << "************size**************" << endl;
        cout << "short: 			" << "字节数:" << sizeof(short) << endl;
        cout << "最大值:" << (numeric_limits<short>::max)();
        cout << "		最小值:" << (numeric_limits<short>::min)() << endl;
        cout << "int: 			" << "字节数:" << sizeof(int) << endl;
        cout << "最大值:" << (numeric_limits<int>::max)();
        cout << "	最小值:" << (numeric_limits<int>::min)() << endl;
        cout << "unsigned: 		" << "字节数:" << sizeof(unsigned) << endl;
        cout << "最大值:" << (numeric_limits<unsigned>::max)();
        cout << "	最小值:" << (numeric_limits<unsigned>::min)() << endl;
        cout << "long: 			" << "字节数:" << sizeof(long) << endl;
        cout << "最大值:" << (numeric_limits<long>::max)();
        cout << "	最小值:" << (numeric_limits<long>::min)() << endl;
        cout << "unsigned long: 		" << "字节数:" << sizeof(unsigned long) << endl;
        cout << "最大值:" << (numeric_limits<unsigned long>::max)();
        cout << "	最小值:" << (numeric_limits<unsigned long>::min)() << endl;
        cout << "long long: 		" << "字节数:" << sizeof(long long) << endl;
        cout << "最大值:" << (numeric_limits<long long>::max)();
        cout << "		最小值:" << (numeric_limits<long long>::min)() << endl;
        cout << "unsigned long long: 	" << "字节数:" << sizeof(unsigned long long) << endl;
        cout << "最大值:" << (numeric_limits<unsigned long long>::max)();
        cout << "		最小值:" << (numeric_limits<unsigned long long>::min)() << endl;
        cout << "double: 		" << "字节数:" << sizeof(double) << endl;
        cout << "最大值:" << (numeric_limits<double>::max)();
        cout << "	最小值:" << (numeric_limits<double>::min)() << endl;
        cout << "long double: 		" << "字节数:" << sizeof(long double) << endl;
        cout << "最大值:" << (numeric_limits<long double>::max)();
        cout << "	最小值:" << (numeric_limits<long double>::min)() << endl;
        cout << "float: 			" << "字节数:" << sizeof(float) << endl;
        cout << "最大值:" << (numeric_limits<float>::max)();
        cout << "	最小值:" << (numeric_limits<float>::min)() << endl;
        system("pause");
        return 0;
    }

    3、实型常量的表示

    实型常量可表示为十进制小数(如123.4,234.0等)或者科学记数法(如1.234*e2)
    注意,使用底数e代表10,比如〖10〗^2 表示为1e2,前面的1不可省略。

    三、字符型

    1、字符型数据的内部表示

    字符在计算机内部用一个编号表示。编号采用ASCII标准。
    关于ASCII标准对照表,可参考:
    ASCII码对照表
    在C++中使用char表示字符类型。其占用一个字节的内存。

    2、字符运算

    字符能执行比较、算术运算和输入输出。运算时计算机提取字符对应的ASCII码值参与计算。
    如执行可执行‘A’+‘B’,计算机会找出A的码值65和B的码值66进行相加。

    3、字符常量的表示

    C++的字符常量是用单引号括起来的一个字符。如‘S’,‘1’,‘?’。这些字符称为可打印字符。
    ASCII码编码的长度为8位,但实际可打印的字符通常只有100多个,多出来的这些编码被计算机用来作为控制,称为“非打印字符”。这些字符通过转义序列的方式进行输入和打印。
    转义字符的定义,可参考:
    转义字符

    在此举一个例子,如换行转义字符 :
    当执行:cout<<"Hello world";
    此时控制台的输出为两行:
    Hello
    World

    四、布尔型

    布尔型用于表示“真”或”假“这样的逻辑值。C++中使用bool作为布尔型关键字,它有两个值,分别为true和false。在VS中布尔型数据占用一个字节的内存。true表示逻辑真,在内存中值为1,false表示逻辑假,在内存中表示为0。

    五、枚举类型

    枚举类型可用来表示取值仅为有限的数据,比如一周中的七天。枚举类型的关键字为enum,定义枚举类型采用格式 enum 枚举类型名{元素表},例如定义一周可采用 enum Weekday{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday},此时定义了一个取值仅为7个有效值的的枚举类型,在内部表示中,将从0开始为枚举类型的元素赋值,如上面的定义中,Sunday值为0,Saturday值为0。当然,你也可以自己某元素指定值,如你可以这样操作enum Weekday{Sunday=1,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}。
    当定义了枚举类型后便可以定义枚举类型的变量:
    如 enum Weekday w1,此时w1即为枚举类型变量,其可取值为上面所定义的7个值。
    或者也可以这样定义:
    Weekday w2。这个定义和上面的定义是完全相同的。
    对于枚举类型的变量,可进行的运算包括赋值和比较,比如对上面定义的w1,w2,可以执行w1=Sunday,w2=Monday,w1>w2,实际上在内部运算时,计算使用的是变量对应的ASCII码值。

    六、其它一些实用的小技巧

    1、用typedef重新命名类型名

    使用typedef可以为C++内置的类型重新指定一个名称,如:
    typeof int INT,此时INT便具有int一样的功能。
    此时你可以这样定义变量: int a;
    也可以用你自定义的类型来定义: INT a;

    2、变量的初始化

    在C++中,定义变量只是为变量分配了存储空间,但是并没有为其指定值,此时你可以自己指定初值,比如int a=12;此时即表示定义了一个int型的变量a并且把12赋给a,此时a的值便是12。若定义时没有为变量指定初值,则C++会为其随机赋值。

    3、用sizeof()了解内存占用量

    sizeof()运算可以求解出C++内部数据类型的内存占用量,比如sizeof(int)可以得到int型的内存占用大小。

    4、符号常量

    符号常量即使用变量来代替某个具体的值,但是这个变量的值是不可更改的。比如要表示3.14159,每次使用都输入这样一个值是极其不方便变的,此时你可以定一个常量pi来表示该值,符号常量的定义格式为:const <类型名> <常量名> =<值>
    比如定义const pi=3.14159。注意:符号常量必须在定义时为其指定初值,一旦定义其值便不可在程序中更改。

    七、小结

    本篇文章主要介绍了C++中的五种内置数据类型(整型、实型、字符型、布尔型、枚举型)和他们各自的表示,内存占用及其使用注意事项。

  • 相关阅读:
    吃甘蔗(中等,模拟)
    jquery对象里面的context参数
    event对象的使用注意事项
    EcmaScript源码
    对js运算符“||”和“&&”的总结
    浏览器滚动条样式
    浏览器的重绘与重排
    input[checkbox],input[radiobox]的一些问题
    height:100%
    Sublime Text 3 多行游标
  • 原文地址:https://www.cnblogs.com/yczha/p/13160295.html
Copyright © 2011-2022 走看看