C++的基本类型
一.简介
在数学中,整数和分数统称为有理数,无限不循环小数和开根开不尽的数统称为无理数,而有理数和无理数统称为实数。
在计算机中,处理的对象是数据。为了描述不同的对象而需要不同的数据,因此,C++语言提供了丰富的数据类型。
二.C++常见的数据类型
C++的数据类型主要包括基本数据类型和构造数据类型。其中基数据本类型包括整型、浮点型、字符型、布尔型、空类型;构造数据类型(也称为自定义类型或复合数据类型)包括枚举类型、数组类型、结构体类型、共同体类型、指针类型、类类型。
对于不同类型的数据,其区别主要有如下:
1)所表示的对象不同。
2)声明的方式不同。
3)所占存储空间不同。
类型 | 类型名 | 占字节数 | 数值范围 |
整型 | int(signed int) | 4 | -2147483648~+2147483647(-231~231-1) |
无符号整型 | unsigned (unsigned int) | 4 | 0~4294967295(0~232-1) |
短整型 | short(signed short) | 2 | -32768~+32767(-215~215-1) |
无符号短整型 | unsigned short | 2 | 0~65535(0~216-1) |
长整型 | long (signed long) | 4 | -2147483648~+2147483647(-231~231-1) |
无符号长整型 | unsigned long | 4 | 0~4294967295(0~232-1) |
双长型 | long long | 8 | -9223372036854775808~9223372036854775807(-263~263-1) |
字符型 | char | 1 | -128~+127(-27~27-1) |
无符号字符型 | unsigned char | 1 | 0~255(0~28-1) |
单精度型 | float | 4 |
-3.4×1038~3.4×1038 |
双精度浮点型 | double | 8 |
-1.7×10308~1.7×10308 |
长双精度浮点型 | long double | 8 |
-1.7×10308~1.7×10308 |
布尔型 | bool | 1 | {true,false} |
空类型 | void | 0 | {} |
对于各种数值型数据类型来说,由于它们占用的存储单元长度不同,且又带有符号位和无符号位之分,因此,各种数据类型所能表示的范围不同。
每种数据类型均会占据固定长度的字节,并决定了它所能表示数值范围。
整型常量表示方法有十进制形式、八进制形式(以数字0开头,由0~7之间的数字组成的数据)、十六进制形式(以0x或0X开头,由数字0~9和字母A~F组成的数据,其中字母不区分大小写)。
[10]十进制 = [012]八进制 =[0x0A]十六进制
有符号的整数在计算机内是以二进制补码的形式存储的,存储单元的最高位用来表示数值的符号位,“0”表示正,“1”表示负。无符号整数只能是零和正数,其全部二进制均表示数值本身。
有符号短整数临界值如下:
最小负数: -32768 = [1000000000000000] 最大负数: -1 = [1111111111111111] 最小数: 0 = [0000000000000000] 最大正数: 32767 = [0111111111111111]
无符号短整数临界值如下:
最小数: 0 = [0000000000000000] 最大数:65535 = [1111111111111111]
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。
[1]二进制 = 00000001 [-1]二进制 = 10000001
原码是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
[+1]原码 = 00000001 [-1]原码 = 10000001
反码是正数的反码是其本身,和原码一样。负数的反码是在原码的基础上,符号位不变,其余位取反。
补码是正数的补码是其本身,负数的补码是在其原码的基础上,符号位不变,各位取反,再加1。
[+1] = [00000001]原码 = [00000001]补码 [-1] = [10000001]原码 = [11111110]补码
浮点型即实型,是我们平时常用的小数,分为单精度浮点型和双精度浮点型。
实型数有两种表示形式:小数表示法和指数表示法。
实型的小数表示法,在使用时,实型常量分为整数部分和小数部分,其中的一部分可在实际使用时忽略,但整数和小数部分不能同时省略。
实型的指数表示法,也称为科学记数法,指数部分以e或E开始,而且必须是整数。若浮点型采用指数表示,则e或E的两边都至少要有一位数。
一般情况下,单精度浮点型只能显示6位有效数字,而双精度浮点型能显示15位有效数字。
浮点型在计算机中同样也必须要用二进制表示,分两部分:整数和小数部分。
布尔型数据的取值只能是true(真)或false(假)。
字符型是用一对单引号括起来的一个字符。
字符型数据在内存中是以ASCII码的形式存储的,并分为可见字符型和不可见字符型。ASCII码有128个字符,其中ASCII值从0~31和127为不可见字符,即控制字符。
在C++语言中,允许用一种特殊形式的字符,即以“\”打头的格式字符,称为转义字符。常见的转义字符如下:
字符形式 | 整数值 | 代表符号 | 字符形式 | 整数值 | 代表符号 |
\a | 0x07 | 响铃 | \" | 0x22 | 双引号 |
\b | 0x08 | 退格 | \' | 0x27 | 单引号 |
\t | 0x09 | 水平制表符 | \? | 0x3F | 问号 |
\n | 0x0A | 换行 | \\ | 0x5C | 反斜杠字符 |
\v | 0x0B | 垂直制表符 | \ddd | 0ddd | 1~3位八进制数 |
\r | 0x0D | 回车 | \xhh | 0xhh | 1~2位十六进制 |
对于不同类型的数据,可以执行的操作不同。
1 #include <iostream> 2 3 using namespace std; 4 5 int main(void) 6 { 7 cout<<"字符型(char)所占字节数:"<<sizeof(char)<<endl; 8 cout<<"无符号字符型(unsigned char)所占字节数:"<<sizeof(unsigned char)<<endl; 9 cout<<"短整型(short int)所占字节数:"<<sizeof(char)<<endl; 10 cout<<"有符号短整型(signed short int)所占字节数:"<<sizeof(signed short int)<<endl; 11 cout<<"无符号短整型(unsigned short int)所占字节数:"<<sizeof(unsigned short int)<<endl; 12 cout<<"整型(int)所占字节数:"<<sizeof(int)<<endl; 13 cout<<"有符号整型(signed int)所占字节数:"<<sizeof(signed int)<<endl; 14 cout<<"无符号整型(unsigned int)所占字节数:"<<sizeof(unsigned int)<<endl; 15 cout<<"长整型(long int)所占字节数:"<<sizeof(long int)<<endl; 16 cout<<"有符号长整型(signed long int)所占字节数:"<<sizeof(signed long int)<<endl; 17 cout<<"无符号长整型(unsigned long int)所占字节数:"<<sizeof(unsigned long int)<<endl; 18 cout<<"单精度浮点型(float)所占字节数:"<<sizeof(float)<<endl; 19 cout<<"双精度浮点型(double)所占字节数:"<<sizeof(double)<<endl; 20 cout<<"长双精度浮点型(long double)所占字节数:"<<sizeof(long double)<<endl; 21 return 0; 22 }
运行结果如下:
任何一种数据类型都有一个确定的最大值和最小值。若该类型数值的变化超出了这个范围,即这种现象称为溢出。
枚举是一种自定义数据类型,是若干具有名字的整型常量的集合,其中具有这种数据类型的量称为枚举量。
数组是一种自定义数据类型,是具有相同数据类型或相同属性的若干数据的有序集合。
结构体类型是用于存储一系列具有相同类型或不同类型的数据构成的数据集合。
共同体是一种自定义数据类型,将不同类型的数据存放到同一段内存单元中,即不同类型的数据共享同一地址开始的内存空间,同时,所占的内存长度一般等于其最大成员内存长度。
指针类型是由用户自定义不同类型的指针的集合。
类类型是由用户自定义的具有相同属性和行为的一组对象的集合。
三.总结
在编写程序时,首先确定某个变量的特点和范围,然后可以据此确定其数据类型。最后,通过实际问题,定义相关的数据类型的量,进而处理实际生活中碰到的问题。