C++ 数据类型
c++的数据类型和c的数据类型基本保持一致。
类型名 | 字节长 | 取值范围 |
---|---|---|
bool | 1 | flase,true |
char | 1 | -128~127 |
signed char | 1 | -128~127 |
unsigned char | 1 | 0~255 |
short(signed short) | 2 | -32768~32767 |
unsigned short | 2 | 0~65535 |
int(signed int) | 4 | -2147483648~2147483647 |
unsigned int | 4 | 0~4294967295 |
long(signed long) | 4 | -2147483648~2147483647- |
unsigned long | 4 | 0~4294967295 |
float | 4 | 3.410-38~3.41038 |
double | 8 | 1.710-308~1.710308 |
long double | 8 | 1.710-308~1.710308 |
整型数据类型大小排序: bool , char , signed char, unsigned char, short , unsigned short , int , unsigned int ,long , unsigned long , long long , unsigned long long
浮点数排序大小:float , double , long double
其中还有一个宽字符型 ,它是由下面方式来表示。
typedef short int wchar_t;
从表中可以看到,c++的基本数据类型有bool,char,int,float,double等类型。除了bool类型外,可以主要分为两大类:整数和浮点数。因为char型从本质上也可以认为是整形,长度为1,存放字符的ASCII码。其中关键词unsigned 、signed、short、long,被称为修饰符。
其中用short修饰int时,short int表示短整型,占2个字节。此时int可以省略,而long int表示长整型,占4个字节,也可以省略int。
c++标准并没有明确规定每种数据类型的字节数与取值范围。不同的编译器对此会有不同的实现。面向32位的处理器通常将int和long两种数据类型用4字节表示,但一些面向64位的处理器,int用4字节表示,long用8个字节表示。因此,(unsigned)int 和unsigned long虽然在表中具有相同的取值范围,但仍然是两种不同的类型。一般情况下,如果对一个整数所占字节数和取值范围没有特殊要求,使用(unsigned)int 型为宜,因为他具有最高的处理效率。
可以使用 typedef 为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法:
typedef type name
例如,下面的语句会告诉编译器,guojia是 int 的另一个名称:
typedef int guojia;
而通过下面的声明是完全合法的,它创建了一个整型变量 aaa:
guojia aaa
枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
创建枚举,需要使用关键字 enum。枚举类型的一般形式为:
enum 枚举名{ 标识符[=整型常数], 标识符[=整型常数], ... 标识符[=整型常数]} 枚举变量;
如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始。
例如,下面的代码定义了一个颜色枚举,变量 c 的类型为 color。最后,c 被赋值为 "blue"。
enum color { red, green, blue } c;c = blue;
默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。例如,在下面的枚举中,green 的值为 5。
enum color { red, green=5, blue };
在这里,blue 的值为 6,因为默认情况下,每个名称都会比它前面一个名称大 1,但 red 的值依然为 0。
常量是指在程序运行的整个过程中其值始终不可改变的量,也就是直接使用符号表示的量。其中又可分为整型常量、实型常量、字符常量、字符串常量、布尔常量。需要注意的是实型常量,其中的指数形式可以为.123E-1,12.e2,1.e-3,但不能写成e-3这种格式(e不区分大小写,且e后面的数必须为整数)
double guojia = 12.3f
声明一个变量只是将变量名标识符的有关信息告述编译器,是编译器认识该标识符,但是声明并不一定引起内存的分配。而定义一个变量意味着给变量分配内存空间,用于存放对应类型的数据,变量名就是对相应内存单元的命名。在c++中,大多数情况下,变量声明也就是变量定义,只有声明外部变量时例外。
auto存储类型:采用堆栈方式分配内存空间,属于暂时性存储,其内存空间可以多次覆盖使用。
egister存储类型:存放在通用寄存器中。
extern存储类型:在所有函数和程序段中都可以引用。
static存储类型:在内存中是以固定地址存放中的,在整个程序运行起间都有效。
使用const关键字来创建符号常量,常量被创建后其值就固定了,编译器将不允许修改该常量的值。
const int a = 20;
注意,应在声明时对const进行初始化,如果在声明常量时没有提供值,则该常量的值将是不确定的,且无法修改。
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符,并提供了以下类型的运算符:
名字 | 从上到下优先级 | |
---|---|---|
后缀 | () [] -> . ++ - - | 从左到右 |
一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
乘除 | * / % | 从左到右 |
加减 | + - | 从左到右 |
移位 | << >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
位与 AND | & | 从左到右 |
位异或 XOR | ^ | 从左到右 |
位或 OR | | | 从左到右 |
逻辑与 AND | && | 从左到右 |
逻辑或 OR | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
1、将一种算术类型的值赋给另一种算术类型的变量时,c++将对值进行转换
2、表达式中包含不同的类型时,c++将对值进行转换
3、将参数传递给函数时,c++将对值进行转换
1、将小的数据类型转化为大的数据类型,不会出现问题,一般只是转化后所占用的字节更多了,但是要将大的数据类型转化为小的数据类型的话,就会造成数据的丢失。
2、将较大的浮点数转化为较小的浮点数,如double转化为float ,这会造成精度(有效数位)降低,值可能超出目标类型的取值范围,在这种情况下,结果将是不确定的。
3、将浮点类型转换为整型,这会造成小数部分丢失,原来的值可能超出目标类型的取值范围,在这种情况下,结果将是不确定的。
4、当运算涉及到两种数据类型时,一般是较小的类型将被转换为较大的类型。
a、(typeName) value (C语言的写法)
b、value (typeName) (c++的写法)
c、static_cast<> 可以将值从一种数值类型转换为另外一种数据类型,格式为: static_cast (value)
#include int main(){ using namespace std; int auks ,bats , coots; auks=11.99+12.99; bats=(int)12.99+(int)13.99; coots=int(12.99)+int(11.99); cout<<"auks="<< auks <<",bats = "<< bats; cout<<",coots = "(ch)<
往期回顾
01 |C++语法1、类与对象 |
02 |c++语法2、c执行-命名空间-输入输出 |
图 | 郭嘉
文 | 郭嘉
扫码关注桔梗与少年
微信号 : if-u-remembers
新浪微博:桔梗与少年