c++入门笔记(5)数据类型

来源:互联网 发布:网络封包抓取 编辑:程序博客网 时间:2024/05/21 14:04

c++有6种数据类型

分别是:
布尔型(bool)

字符型(char)

双字符型(wchar_t)

整型(int)
- 无符号型
- 长整型
- 短整型

单精度浮点型(float)

双精度浮点型(double)
- 双精度型
- 长双精度型


静态变量(static)
外部变量(extern)
寄存器变量
自动存储变量


从广义上来划分c++的数据类型的话,可以将其分为两个大类:

常量
常量意为着它的值不可改变。
变量
变量的值可以改变。


检验数据类型大小

例1:使用sizeof()函数可检验数据类型占用几个字节空间,以整型为例.

#include <iostream>int main(){    std::cout << "检验数据类型大小-int:" << sizeof(int) << "个字节" << std::endl;    return 0;}

输出:

检验数据类型大小-int:4个字节

布尔型(bool)

布尔型可表示两个逻辑值,1和0,即(true)或(false).
例1:

#include <iostream>int main(){    bool check = true;  //定义一个布尔型变量,并将它的值初始化为真    if(check == true){  //如果check的值为真,那么执行语句块的代码        std::cout << "Hello,word!\n";    }    return 0;}

输出:

Hello,word!

bool check = true

该语句等同于 bool check = 1


字符型变量(char)

字符型变量存放的是字符,这个字符指的是计算机字符集中的字符(ASCII码).字符型变量只占1个字节.
一个字节为8位(2进制的8位),而最大的8位2进制数字为1111 1111,换算成10进制为255,因此字符型变量可存储256个字符,而一个字符可解释为0~255之间的一个数或某个ASCII码.

计算机用1和0的模式给它们做的任何事情编码,有时这些数为指令,有时这些数为一些值,有时则是代码,为了区分开来,一种重要的标准化代码集ASCII产生了.译文:美国标准信息交换码.适用于所有的拉丁文字母,ASCII码有7位码8位码两种形式.


ASCII码共128个字符.,第一个字符或标点都用一个7位二进制数表示.
在计算机的存储单元中,一个ASCII码值占一个字节(8个2进制位),其最高位用作奇偶校验位.是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验偶校验两种.
奇校验规定:
正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位添1.
偶校验规定:
正确的代码一个字节中的个数必须是偶数,若非偶数,则在最高位添1.


例2:

#include <iostream>int main(){    char ch;        //定义一个字符型变量ch    ch = 'A';       //将大写字母A存储到变量名ch所代表的地址中    std::cout << "字符型变量ch中所存储的字符是:" << ch << std::endl;    std::cout << "它的ASCII码是:"<< (int)ch << std::endl;      return 0;}

输出:

字符型变量ch中所存储的字符是:A
它的ASCII码是:65


char ch;

该语句定义了一个字符型变量,它的名字为ch,这样系统便为该变量分配了一个字节的空间,并将空间的地址赋给变量名ch.接着我们就可以通过变量名存储一个字符.

std::cout << "它的ASCII码是:"<< (int)ch << std::endl;

(int)ch 强制转换成整型数值.

当将一个字符赋给一个char型变量时,实现上是将0~255中某个数赋给了该变量,由于编译器知道如何进行字符与ASCII码值之间的转换,因此在输出char型变量的值时,我们看到的总是字符.

例3:数字0与字符’0’是有区别的

#include <iostream>int main(){    char ch1 = 0;       //数值0    char ch2 = '0';     //字符'0'    std::cout << "数值0:" << ch1 << ",ASCII码:" << (int)ch1 << std::endl;    std::cout << "字符0:" << ch2 << ",ASCII码:" << (int)ch2 << std::endl;    return 0;}

输出:
数值0:,ASCII码:0
字符0:0,ASCII码:48


区别:
数字0的字符是,
字符0的ASCII码是48.


例4.输出第32~第128之间所有字符

#include <iostream>int main(){    for(int i=32; i<=128; i++){         //从第32个字符到第128个字符之间所有字符        std::cout << (char)i << "\t";   //强制转换成字符型        if(i%5==0){                     //每5个换一行            std::cout << "\n";        }    }    return 0;}

双字符型(wchar_t)

双字符类型又叫宽字符类型,占2个字节.
中文输出有乱码......未解决


整型(int)

整型int占4个字节.32位2进制数.

int类型的长度并不是固定的,它和系统平台有关糸.
在16位系统中:占2个字节空间.
在32位系统中:占4个字节空间.
在64位系统中:占4个字节空间.

int a;      //定义一个整型变量a

短整型(short int)
可简写为short,占2个字节.16位2进制数.

short int a;    //定义一个短整型变量a

长整型(long int)
可简写为long,占8个字节.64位2进制数.

在32位系统中占4个字节.
在64位系统中占8个字节.

long int a;     //定义一个长整型变量a

无符号整型
无符号整型只能表示正整数

unsigned int a;     //定义无符号整型a,占4个字节unsigned short b;   //定义无符号短整型b, 占2个字节unsigned long c;    //定义无符号长整型c, 占8个字节

有符号整型
有符号整型可以表示负整数.同时由于有符号整型最高位用于表示符号位,因此取值范围要比无符号整型小一倍


单精度浮点型变量(float)

长度4个字节。32位2进制。精度7位有效数字.

float 符号位 指数位(偏码127) 尾数位(共23位,省略了最高的固定整数1) 32位2进制 0 0000 0000 000 0000 0000 0000 0000 0000 为0是正,为1是负 可表示0~255或-126~128 取值范围由指数决定,最多可表示2*223有效数字

双精度浮点型(double)

长度8字节,64位2进制。精度16位有效数字。
1个符号位,11个偏码表示的指数位(偏值=1023),共52位尾数位(省略了最高位的固定整数1)。

符号位为0是正,为1是负。
指数位共11位,可表示0~2047或-1022~1024。
由于它的取值范围是由指数来决定的,所以剩余尾数52位,最多可表示2*252个有效数字。


常量

常量,其值不可改变。可以对常量进行初始化,但是此后就不能再对其进行赋值。
关键字const

const double PI = 3.1415926;  //定义一个双精度类型常量PI,并将它的值初始化为3.1415926

这样这个PI的值就不能再改变了。


枚举型常量

枚举型常量可以使你用文字来替代数字,这样就可以使程序更加易懂。
关键字:enum

例:

enum num{zero, one, two, three, four};

关键字enum将其后的num 声明为枚举型
然后我们为num定义了5个值:zero, one , two, three, four,它们分别代表0, 1, 2, 3, 4。
最后分号表示枚举型num定义结束。
这个例子枚举型的第1个常量默认为0,其后依次增加。


我们也可以自定义起始值
例:

    enum num{zero = 100, one, two = 200, three, four};

此例:我们自定义了第1个常量zero的起始值为100,
第2个常量one的值我们没有指定,它自动为101,
第3个常量two被赋为200,
第4个常量three自动为201,
第5个常量four自动为202。

测试:

#include <iostream>int main(){    enum num{zero = 100, one, two = 200, three, four};    std::cout << zero << "\t" << one << "\t" << two << "\t" << three << "\t" << four << std::endl;    return 0;}

输出:

100 101 200 201 202

实例:判断今天是周未还是工作日

#include <iostream>int main(){    enum day{Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};    day today;  //用枚举型常量day创建一个变量today    today = Monday; //今天赋值星期1    if(today == Sunday || today == Saturday){ //判断一下今天是周未吗?(星期日和星期六)        std::cout << "周末休息\n";    }    else    {        std::cout << "工作日\n";    }    return 0;}

输出:

工作日

用enum定义了一个枚举型常量day,它有7个值,每个值对应一个整数。
从0开始计数,这样星期1(Monday)的值为1,而星期6(Saturday)的值则为6。

这个程序通过使用英文单词:Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
来代替:
0, 1, 2, 3, 4, 5, 6
可以使我们很清楚地了解程序的意思。

这就是枚举型常量的作用,它可以使程序的可读性增加


数据类型取值范围

在64位ubuntu系统中

类型 说明 占用字节 取值范围 int 有符号整型 4 -2147483648~2147483647 short int 有符号短整型 2 -32768~32767 long int 有符号长整型 8 -9223372036854775808 ~ 9223372036854775807 long long 有符号64位整型 8 -9223372036854775808 ~ 9223372036854775807 unsigned int 无符号整型 4 0~4294967295 unsigned short 无符号短整型 2 0~65535 unsigned long 无符号长整型 8 0~18446744073709551615 unsigned long long 无符号64位整型 8 0~18446744073709551615 char 字符型 1 -128~127 float 浮点型 4 3.4E-38~3.4E+38(精度7位有效数字) double 双精度型 8 1.7E-308~1.7E+308(精度16位有效数字) long double 长双精度型 16
原创粉丝点击