数据类型
基本类型(整型int,浮点型float,字符型char,布尔型bool),派生类型(指针类型,数组类型,共用体类型,类类型),空类型(void)
整型
1.一般占4个字节
2.分为有符号和无符号二种:
(1)有符号【signed】int 补码表示,范围为-2**31--2**31-1
(2)无符号unsigned 【int】范围为0--2**32-1
字符型
1.占1个字节
2.有符号:char范围-128--127
3.无符号:unsigned char 范围:0---255
字符型数据实际上是作为整型数据在内存中存储的。
浮点型
没有无符号型,浮点型数据采用尾数和阶码相结合的存储方式
单精度浮点型
占4个字节 标识符:float
双精度浮点型
占8个字节 标识符:double
布尔型
占一个字节 标识符:bool
取值只有ture和false两种,实际存储为1和0
如何查看数据类型用了几个字节
sizeof
#include《iostream》
using namespace std;
int main()
{
cout<<sizeof(int)<<endl;
return 0;
}
或者
{
int length;
length=sizeof(int);
cout<<length<<endl;
return 0;
}
变量
1.变量名:代表了存储在计算机内存中某个地址的一个值。
2.在运行当中,其值可以发生变化(在程序的执行中能够赋值,发生变化)
3.变量名的命名方法:
(1)变量必须有个名字
(2)标识符值得是:变量名,数组名,函数名等。
(3)标识符命名方法:只能由字母,数字,下划线,且第一个不能是数字。
(4)变量名是区分大小写的。
(5)关键字不可以作为标识符。
4.变量在使用时之前一定要说明其类型,一经说明,编译程序要根据类型分配若干个字节(连续的)内存单元,以保存变量的取值。
变量的初始化
在声明变量的同时给变量赋值,即在内存中开辟出一个空间后马上给此空间赋值。即int a=4;
结果等价于int a; a=4;
虽然结果相同,但意义不同。前面叫初始化,后面叫赋值。
这个空间的值不是固定不变的,在运行过程中可以变化,int a=4;//声明并初始化,开辟空间后立马为空间赋值 a=6;//重新给该空间赋值
常量
1.定义:在程序运行过程中,其值一直保持不变的量
2.三种处理方式:
(1)字面常量:从字面形式即可识别的常量(数值型常量和字符型常量)
整型常量:十进制:45,12 八进制(以0开头):043 065 十六进制(以0x开头)0x12
实型常量(浮点数):十进制形式:12.0,23.56 指数型式:23E2,14.5e-1
无论把浮点数写成小数形式还是指数形式,在内存种都是以指数形式存储的。
字符型数据(char):实际上是作为整型数据在内存中存储的。(ASCII码),字符必须要用''单引号来表示 e.g :char grade; grade='A'; 进一步,由于在内存中的形式与整型数据相同,所以,可以直接用整型值给变量赋值。e.g :char grade; grade=65; grade=0x41; grade=0101;这三个和grade='A';等价。
非打印字符:有2种方法来表示这些字符(1)用ASCII码的形式 char re=10;(2)用转义字符 char re='\t';
转义字符虽然包含2个或者更多字符,但它只代表一个字符。编译系统在见到字符“\t”时,会接着找它后面的字符,把它处理成一个字符,在内存中只占一个字符。
常见的转义字符:\n 换行,ASCII码是10
转义字符 | 含义 | ASCII码 |
\n | 换行 | 10 |
\t | 跳到下一个Tab位置 | 9 |
\ddd \xhh | 1到3位8进制数所代表的字符 1到2位16进制所代表的字符 |
例子:想要输出c:\tc\tc 表示为:cout<<"c:\\tc\\tc";
'\101' '\x41' '\x61' '\141'
字符串常量:用双引号“ ”表示,在内存中顺序存放,以"\0"结束。
’a‘只占一个字节,而"a"占2个字节。
(2)常变量:定义变量时,前面加const关键字,则变量的值在程序运行期间不能改变,这种变量称为常变量。e.g.:const a=2.3;
注意:定义变量时,必须同时初始化(即指定其值)。
(3)符号常量(标识符常量):使用编译预处理指令#define。
例如:#define pi 3.1415926 //在程序中凡是出现pi均用3.1415926代替。
这是C语言的习惯,C++推荐用常变量形式。
使用常变量和符号常量有什么好处?
(1)不必重复输入同一个值。
(2)如果必须修改常变量,只需要在源代码中的一个地方做改动。
(3)给常量赋一个描述性的名字会提高程序易读性。
算术运算符和算术表达式
1.算术运算符
+ - * / %。用算术运算符连接起来的式子是算术表达式。
比如:代数式 2x+3+4y-2xy 在程序中对应的表达式:2*x+3+4*y+2*x*y
(1)两个数相除结果是整数:5/2=2
(2)整数才可以求余,余数的符号与左边数的符号相同:1%2=1 7%-2=1 -3%2=-1
2.优先级和结合性
() * / % + -
3.强制类型转换
类型转换是将一种数据类型的值转换成另一种数据类型的操作。
强制转换的语法:(类型名)(表达式) double a
类型转换用法举例:
(1)自动转换(根据赋值号左边变量类型自动转换)
int a; float b=3.14,c;
a=b;//只取b的整数部分 a=3
c=a;//a转换成小数c=3.0
(2)强制转换:有时候强制转换是必要的。
y=(int)6.2%4 //不转换程序会报错。
注意:变量在强制类型运算后原变量不变,仅得到一个所需类型的中间变量。
如:int x;
float y=5.8;
x=(int)y;
结果:y的值没有改变,仍然是单精度浮点型y=5.8; x=5;
4.各类数值型数据间的混合运算
在运算的时候,不同类型的数据要先转换成同一类型的数据再进行运算。
转换规则如下:
double<---------float
double<----long<-------unsigned<-----int<------char,short
5.自增(++),自减(--)运算符
自增,自减运算符应用于表达式中时,前置和后置是不一样的。
int i,j; i=3; j=++i; j=i++;
(1)++在前,先运算,后赋值(i=4;j=4);++在后,先赋值,后运算(j=3;i=4)。
(2)再比如:int i=10; int j=10*i++;------>int i=10;int j=10*i; i=i+1;
int i=10; int j=10*++i;----->int i=10; i=i+1;int j=10*i;
注意:(1)不推荐以上编程习惯,比较复杂,易错,难懂。
(2)自增,自减只能用于变量,不可用于常量和表达式。(因为常量和表达式在内存中没有具体的空间,所以所占的空间不能重新赋值)3++ (x+y)++ (-i)++ 这些表达都是错误的 。
赋值运算符和赋值表达式
1.赋值运算符"="
"="左边必须是变量名。
若"="两边变量的类型不同,在赋值时要进行类型转换。
转换原则:根据左边变量转换。
2.复合的赋值运算符
+= -= *= /= %=
如:a+=3 //a=a+3; x-=y //x=x-y; x*=y+3 //x=x*(y+3)
x/=y-4 //x=x/(y-4) x%=2 //x=x%2
注意:符合运算符中间没有空格。
3.赋值表达式
a=b=5; //b=5 a=b "="的结合性为自右至左。
表达式后面加上”;“,就变成了赋值语句。
4.逗号运算符和逗号表达式
表达式1,表达式2,表达式3,表达式4...........表达式n
顺序求解,结果为最后一个表达式的值,并且优先级最低。
比如:a=(3+4,5*6,2+1); a=3; a=3*3,a+6,a+7; 16 a=9;
(a=3*5,a*4),a+5; 20 a=15;
以上这些例子除了少数情况,实际中很少使用,逗号运算符主要是用于多变量定义。
如:int a,b,c