C++总结之第二章 数据的存储、表示形式和基本运算

一、C++的数据类型

C++可以使用的数据类型如下:

说明:

(1)C++中没有规定每一种数据所占的字节数,只规定int型数据所占的字节数不大于long型,不小于short型。

(2)在整型符号int和字符型符号char前,可以加修饰符signed(表示“有符号”)或unsigned(表示“无符号”)。如果指定为signed,则数值以补码形式存放,存储单元中的最高位(bit)用来表示数值的符号。如果指定为unsigned,则数值没有符号, 全部的二进制位都用来表示数值本身。

有符号时,能存储的最大值为2的十五次方-1,即32767,最小值为-32768;

无符号时,能存储的最大值为2的十六次方-1,即65535,最小值为0.

有些数值是没有负值的(如学号、货号、身份证号等),可使用unsigned,它存储正数的范围比用signed时扩大一倍。

二、常量

(一)什么是常量

常量包括 数值型常量字符型常量

(二)数值常量

1、整型常量的类型

(1)一个整数(其值在-32768~+32767),可以赋值给short int型、int型和long int型变量

(2)一个整数(其值在-2147483648~+2147483647范围内),则认为它是long int型,它可以将它赋值给一个int或long int型变量。

(3)如果某一计算机系统的C++版本确定Int与long int型数据在内存中占据的长度相同,则它们能够表示的数值范围相同。因此,一个int型的常量同时也是一个long int型常量,可以赋值给int型或long int 型变量。

(4)常量无unsigned型。但一个非负数的整数可以赋值给unsigned型变量,只要它的范围不超过变量的取值范围即可。例如可以将50000赋给一个unsigned short int型变量是可以的,而将70000赋给它是不行的(将会溢出)。

一个整型常量可以用3种不同的方式表示:

(1)十进制整数。

  • 带或者不带正负号;
  • 没有小数点
  • 由数字0~9组成的符号串
  • 不能以0开始

如1357,-432,0等。在一个整常量后面加一个字母I或L,则认为是long int型常量。例如123L,421L,0L等,这往往用于函数调用中。如果函数的形参为long int,则要求实参也为long int型,此时用123作实参不行,而要用123L作实参。

(2)八进制整数。

  • 以0为前缀;
  • 没有小数点;
  • 由数字0~7组成的字符串;
  • 只能表示正整数;

(3)十六进制整数。

以0x(或0X)为前缀;

  • 没有小数点;
  • 由0~9及a~f(或A~F)组成的符号串;
  • 只能表示正整数;

2、浮点数的表示方法

(1)十进制小数形式。

它由整数部分和小数部分组成,可以省略其中之一(如78.0或.06,.0),但不能二者皆省略。

C++编译系统把用这种形式表示的浮点数一律按双精度常量处理,在内存中占8个字节。

如果实数的数字后面加字母F或f,表示此数为单精度浮点数,如1234F,-43f,占4个字节。

如果加字母L或l,表示此数为长双精度数,在Visual C++中占8个字节。

(2)指数形式(即浮点形式)。

其一般形式为:数符 数字部分 指数部分

例如:

a=0.314159e1;

a=3.14159e0;

a=31.4159e-1;

a=314.159e-2;

以上4个赋值语句用了不同形式的浮点数,但其作用是相同的。

(三)字符常量

1、普通的字符常量

定义:用单撇号括起来的一个字符就是字符常量。如‘a','%','#'都是合法的字符常量。

  • 在内存中占一个字节;
  • 字符常量只包括一个字符,如'AB'是不合法的;
  • 撇号(’)是定界符,而不属于字符常量的一部分。如:cout<<'a',输出的是一个字母‘a',而不是3个字符"'a'".

2、转义字符常量

转义字符虽然包含两个或多个字符,但它只代表一个字符,在内存中只占一个字节。

3、字符数据在内存中的存储形式及其使用方法

  • 将一个字符常量存放到内存单元是指 将该字符相应的ASCII代码放到存储单元中;
  • 在C++中字符型数据和整型数据之间可以通用,一个字符数据可以赋给一个整型数据,反之亦然;
  • 也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算;

4、字符串常量

定义:用双撇号括起来的字符就是字符串常量,如“abc","hello!","a+b","li-ping"都是字符串常量。字符串常量”abc"在内存中占4个字节(而不是3个)是因为,编译系统会在字符串最后自动加一个'\n'作为字符串结束标志。但’\n'并不是字符串的一部分,它只作为字符串的结束标志。

a b c \n

注意:

‘a'和"a"代表不同的含义,“a"是字符串常量,’a'是字符常量。前者占两个字节,后者占一个字节。

分析下面程序片段:

char c;//定义一个字符变量

c='a';//正确

c="a";//错误,c只能容纳一个字符

(四)符号常量

用一个符号代表一个常量,称为符号常量,即以标识符形式出现的常量。

#include "pch.h"
#include <iostream>
using namespace std;
#define PRICE 30;
int main()
{
	int num, total;
	num = 10;
	total = num * PRICE;
	cout << "total=" << total << endl;
	return 0;
}

运行结果:total=300

程序分析:程序中用预处理指令#define指定PRICE在本程序单位中代表常量30。注意符号常量虽然有名字,但它不是变量。在进行编译预处理时,所有的PRICE都被置换为字符30,在正式进行编译时已经没有PRICE这个表示符了。显然符号常量不能被赋值,如用赋值语句"PRICE=40;"给PRICE赋值是错误的

三、变量

(一)什么是变量

定义:在程序运行期间其值可以改变的量称为变量。一个变量应该有一个名字,并在内存中占据一定的存储单元。

(二)变量名规则

1、标识符定义:用来标识变量、符号常量、函数、数组、类型等实体名字的有效字符序列称为标识符。

     变量名是标识符的一种。

2、命名规则:C++规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。

3、下面是不合法的标识符和变量名:M.D.John,$123,#33,3G64,Ling li,C++,Zhang-ling,U.S.A

      一般变量名用小写字母表示

(三)定义变量

定义变量的一般形式: 数据类型  变量名表列;

C++要求在第一次使用变量之前进行定义即可,也就是说它可以出现在语句的中间。

int a;
a=3;
float b;
b=4.67;
char c;
c='A';

(四)对变量赋初值

1、初值可以是常量,也可以是一个有确定值的表达式。如float a,b=5.78*3.5,c=2*sin(2.0);

2、初始化不是在编译阶段完成的,而是在程序运行时执行本函数时赋予初值的,相当于执行一个赋值语句。

例如:int a=3;

相当于以下两个语句: int a; a=3;

(五)常变量

定义:在定义变量时,如果加上关键字const,则变量的值在程序运行期间不能改变,这种变量称为常变量。

例如:const int a=3;//用const来声明这种变量的值不能改变,指定其值始终为3;

常变量不能出现在赋值号的左边,上面一行不能写成

const int a;

a=3;//常变量不能被赋值

可以用表达式对常变量进行初始化,如const int b=3+6;

四、算术运算符与算术表达式

(一)基本的算术运算符(+ - * / %)

两个数相除的结果为整数。多数编译系统(包括VisualC++)采取“向零取整”的方法,即5/3的值为1,-5/3的值为-1,取整后向零靠拢。

(二)表达式中各类数值型数据间的混合运算

在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则如图:

图中横向向左的箭头表示必定的转换,如char和short型数据必先转换为int型,float型数据在运算时一律先转换成double型(即时是两个float型数据相加,也都先转换成double型,然后再相加)

(三)自增(++)和自减(--)运算符

++i 先执行i=i+1,再使用i的值;i++ 先使用i的值后,再执行i=i+1;(减法同理)

如:i=3;cout<<++i;

       输出4;

       如果改为cout<<i++;

       则输出3。

(四)强制类型转换运算符

两种形式:

1、(类型名)(表达式)

例如:(double)a  (将a转换成double类型)

            (int)(x+y)  (将x+y的值转换成整型)

2、类型名(表达式)

如:int(x)或int(x+y)

如果x原指定为float型,值为3.6,进行强制类型运算后得到一个int型的中间数据,它的值等于3,而x原来的类型和值都不变。

 3、由以上可知系统类型转换分为 隐式类型转换(系统自动进行转换)和强制类型转换。

当自动类型转换不能实现目的时,可以用强制类型转换。如“%”运算符要求其两侧均为整型量,若x为float型,则"x%3"不合法,必须用“(int)x%3".由附录B可以查到,强制类型转换运算优先于%运算,因此先进性(int)x的运算。

(五)赋值运算符和赋值表达式

1、赋值过程中的类型转换

(1)将浮点型(包括单、双精度)数据赋值给整型变量时,舍弃其小数部分,以整数形式存储。

(2)将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。

(3)将一个double型数据赋给float变量时,要注意数值范围不能溢出。

(4)字符型数据赋给整型变量,将字符ASCII码赋给整型变量。

(5)将一个int,short或long型数据赋给一个char型变量,只将其低8位原封不动地送到char型变量。

(6)将signed型数据赋给长度相同的unsigned型变量,将存储单元内容原样照搬(连原有的符号位也作为数值一起传送)。

2、复合赋值运算符

a+=3       等价于 a=a+3

x*=y+8    等价于x=x*(y+8)

x%=3      等价于x=x%3

3、赋值表达式

“赋值表达式”一般形式为:变量=表达式

左值

赋值运算符左侧的标识符称为”左值“,变量可以作为左值。

不能作为左值:表达式a+b,常变量

右值

左值都可以作为右值

(六)逗号运算符和逗号表达式

逗号表达式的一般形式:

表达式1,表达式2

逗号表达式的求解过程是:先求解表达式1,再求解表达式2.整个逗号表达式的值是表达式2的值。

猜你喜欢

转载自blog.csdn.net/gabby____/article/details/85642712