c++数据类型回顾

  c++的基本基本类型在下表(下表中的各类型长度和取值范围以32位处理器为准)

类型名 长度(字节) 取值范围
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.4*10-38~3.4*1038
double 8 1.7*10-308~1.7*10308
long double 8 1.7*10-308~1.7*10308

 

 

 

 

 

 

 

 

 

 

 

其中还有一个宽字符型 ,它是由下面方式来的。

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。

  iso c++标准并没有明确规定每种数据类型的字节数与取值范围。不同的编译器对此会有不同的实现。面向32位的处理器通常将int和long两种数据类型用4字节表示,但一些面向64位的处理器,int用4字节表示,long用8个字节表示。因此,(unsigned)int 和unsigned long虽然在表中具有相同的取值范围,但仍然是两种不同的类型。
  一般情况下,如果对一个整数所占字节数和取值范围没有特殊要求,使用(unsigned)int 型为宜,因为他具有最高的处理效率。
注意

1、typedef  类型

   可以使用 typedef 为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法:

typedef type name

    例如,下面的语句会告诉编译器,feet 是 int 的另一个名称:

typedef int feet;

      现在,下面的声明是完全合法的,它创建了一个整型变量 distance:

feet distance;

2、枚举类型

  枚举类型(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。

3、常量

  常量是指在程序运行的整个过程中其值始终不可改变的量,也就是直接使用符号表示的量。其中又可分为整型常量、实型常量、字符常量、字符串常量、布尔常量。需要注意的是实型常量,其中的指数形式可以为.123E-1,12.e2,1.e-3,但不能写成e-3这种格式(e不区分大小写,且e后面的数必须为整数

实型常量的值默认为double类型,如果有后缀如
  12.3f
该数为float类型

4、变量

  声明一个变量只是将变量名标识符的有关信息告述编译器,是编译器认识该标识符,但是声明并不一定引起内存的分配。而定义一个变量意味着给变量分配内存空间,用于存放对应类型的数据,变量名就是对相应内存单元的命名。在c++中,大多数情况下,变量声明也就是变量定义,只有声明外部变量时例外。

  

auto存储类型:采用堆栈方式分配内存空间,属于暂时性存储,其内存空间可以多次覆盖使用。
register存储类型:存放在通用寄存器中。
extern存储类型:在所有函数和程序段中都可以引用。
static存储类型:在内存中是以固定地址存放中的,在整个程序运行起间都有效。

使用const关键字来创建符号常量,常量被创建后其值就固定了,编译器将不允许修改该常量的值。

const int a = 20;

注意,应在声明时对const进行初始化,如果在声明常量时没有提供值,则该常量的值将是不确定的,且无法修改。

5、运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符,并提供了以下类型的运算符:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 杂项运算符

          运算符优先级

后缀  () [] -> . ++ - -   从左到右 
一元  + - ! ~ ++ - - (type)* & sizeof  从右到左 
乘除  * / %  从左到右 
加减  + -  从左到右 
移位  << >>  从左到右 
关系  < <= > >=  从左到右 
相等  == !=  从左到右 
位与 AND  从左到右 
位异或 XOR  从左到右 
位或 OR  从左到右 
逻辑与 AND  &&  从左到右 
逻辑或 OR  ||  从左到右 
条件  ?:  从右到左 
赋值  = += -= *= /= %=>>= <<= &= ^= |=  从右到左 
逗号  从左到右 

--摘自《C语言程序设计实用问答》       
    问题:如何记住运算符的15种优先级和结合性?    
    解答:C语言中运算符种类比较繁多,优先级有15种,结合性有两种。    
    如何记忆两种结合性和15种优先级?下面讲述一种记忆方法。    
    结合性有两种,一种是自左至右,另一种是自右至左,大部分运算符的结合性是自左至右,只有单目运算符、三目运算符的赋值运算符的结合性自右至左。    
    优先级有15种。记忆方法如下:    
    记住一个最高的:构造类型的元素或成员以及小括号。    
    记住一个最低的:逗号运算符。    
    剩余的是一、二、三、赋值。    
    意思是单目、双目、三目和赋值运算符。    
    在诸多运算符中,又分为:    
    算术、关系、逻辑。    
    两种位操作运算符中,移位运算符在算术运算符后边,逻辑位运算符在逻辑运算符的前面。再细分如下:    
    算术运算符分     *,/,%高于+,-。    
    关系运算符中,〉,〉=,<,<=高于==,!=。    
    逻辑运算符中,除了逻辑求反(!)是单目外,逻辑与(&&)高于逻辑或(||)。    
    逻辑位运算符中,除了逻辑按位求反(~)外,按位与(&)高于按位半加(^),高于按位或(|)。    
    这样就将15种优先级都记住了,再将记忆方法总结如下:    
    去掉一个最高的,去掉一个最低的,剩下的是一、二、三、赋值。双目运算符中,顺序为算术、关系和逻辑,移位和逻辑位插入其中。

猜你喜欢

转载自www.cnblogs.com/yc555/p/11263250.html
今日推荐