一个字节表示整数,范围为-128~127 2的8次方
两个字节表示整数,范围为-32768~32767 2的16次方
一般用四个字节表示整数 2的64次方
01表示的二进制中,正数的第一个是0,负数的第一个是1,补码取反
常量:程序运行过程中,值一直保持不变的量。编译器只根据其表面形式来判断其类型
变量:程序运行过程中,值可以改变的量。变量在程序执行中能够赋值,发生变化,在使用之前就要说明变量类型。一旦说明,就在程序中占据与类型相对应的存储单元
int num,total;//定义变量,在内存中开辟区间
num = 10;//变量赋值,10为常量
total = num * PRICE;
变量名的命名方法:
变量名、数组名、函数名…统称为标识符,标识符只能由字母、数字、下划线这三种字符组成,且第一个字符必须是字母或下划线,长度不大于247个字符,大小写不通用
关键字不能作为标识符,关键字是VC++语法要求中使用的字,如int if while 等
一般变量都是匈牙利命名法命名的:变量名=属性+类型+对象描述,如nCount chChoice
属性部分:g_ 全局变量 c_ 常量 m_ c++类成员变量 s_ 静态变量
类型部分:数组 a 指针p 函数fn 无效v 句柄h 长整型l 布尔b 浮点型(有时也指文件)f 双字dw 字符串sz 短整型 n 双精度浮点d
计数c(通常用cnt)字符ch(通常用c)整型i(通常用n)字节by 字w 实型r 无符号u
描述部分:最大Max 最小Min 初始化Init 临时变量T(或Temp)源对象Src 目的对象Dest
整型常量:
1.十进制
2.八进制 以0开头
3.十六进制 以0x开头
整型常量也有长短之分,常量中无unsigned型,但一个非负的整型常量可以赋给unsigned型的变量
若一个常量定义为长整型数,在后加I或L区分,如32I 32L,内存分配四个字节存储
整型变量:分为有符号型与无符号型
有符号型:
short 2个字节,范围是-2^15~2^15-1
Int 4个字节,范围是-2^31~2^31-1
long 4个字节,范围是-2^31~2^31-1
无符号型:最高位不表示符号位
unsigned short 2个字节,范围是0到2^16-1
unsigned int 4个字节,范围是0到2^32-1
unsigned long 4个字节,范围是0到2^32-1
不同类型的整型数据间的赋值,按存储单元中的存储形式直接传送
实型数/浮点数:
1.十进制 23.0
2.指数形式 23E1 (2.3) e前有数字,后面必须是整数
实型变量:
单精度float 占4个字节,提供7~8位有效数字
双精度double 占8个字节,提供15~16位有效数字
实数:既有整数又有小数的数N=S*R^J
S称为尾数,决定有效数字,即数字的精度
J表示指数(阶码)
R是基数,可取2,4,8,16等
数和阶码都有正负,所以设置数符和阶符
字长一定,尾数越多,精度越高;阶码越多,范围越大
定点数和浮点数都会出现溢出现象
定点数
定点整数:0<=|x|<=2^(n-1)-1,且
例如1111表示-7
定点小数:0<=|x|<=1-2^(-(n-1)),且
,例如1111表示-0.875.
定点表示法运算直观,但数的表示范围较小,不同的数运算时要考虑比例因子的选取,以防止溢出。
浮点表示法运算时可以不考虑溢出,但浮点运算,编程较难。要掌握定、浮点数的转换方法及浮点数规格化方法。
原码:第1位表示符号,其余位表示值,0表示正,1表示负
[+1]原 = 0000 0001
[-1]原 = 1000 0001
反码:正数的反码是其本身,负数的反码,符号位不变,其余取反
补码:正数的补码是其本身,负数的补码,符号位不变,其余取反+1
字符型数据char
作为整型数据在内存中存储的,计算机内部用ASCII码表示所有字符,7位二进制数即可表示一个字符,用一个字节的容量(8位)存储一个字符
A的ASCII码是0x41或者65,在内存中表示为 0100 0001
a的ASCII码是97,大小写字母码之间相差32
可以直接用整型值给变量赋值
以下的赋值形式均是等同的
grade=‘A’; grade=65; grade=0x41; grade =0101;
非打印字符:用ASCII码或者转义字符都可以表示
\n 换行 ASCII代码:10
\t tab ASCII码:9
\\b 退格 ASCII码:8
\\ 反斜杠字符”\“
\ddd 1到3位8进制数所代表的的字符,8进制
\xhh 1到2位16进制数所代表的的字符,\x表示16进制
转义字符虽然包含2个或多个字符,但只代表1个字符,在内存中只占一个字节
字符串常量:用”“表示,在内存中顺序存放,以‘\0’结束
‘A’在内存中占一个字节,”a”占两个字节
标识符常量
用两种方法定义标识符常量:使用编译预处理指令;使用C++的常量说明符const
如:
#define PI 3.14//程序中PI均用3.14替代
const float pi=3.14;//将变量pi定义为常量
课后练习:
下列常量的表示在C++中是否合法?若不合法,指出原因;若合法,则指出常量的数据类型。
32767 , 35u , 1.25e3.4, 3L , 0.0086e-32, ‘\87’ ,“Computer System” , “a”, ‘a’ , ‘\96\45’
-0 ,+0 ,.5 ,-.567
合法:32767—int型;35u--unsigned型;3L—长整型常量;0.0086e-32—指数形式的浮点常量;
“Computer System”—字符串;“a”—字符串; ‘a’—字符;-0 —int型;+0 ,.5—浮点型 ,-.567—浮点型
非法:1.24e3.4—e后面必须是整数;‘\87’—八进制中不允许出现8;‘\96\45’—八进制中不允许出现9;
变量根据取值的不同值域,分为不同类型:整型、实型、字符型、构造型、指针型变量等等
对于任一变量,编译程序要为其分配若干个字节连续的内存单元,以保存变量的取值。开辟空间后,空间中为随机值
改变一个变量的值,要把变量新的取值存放到为该变量所分配的内存单元中;用到一个变量的值时,从该内存单元中取出数据。
变量的说明在前,使用变量在后
算术运算符的优先级:() * / % + -
强制转换类型:(类型名)(表达式)
(double)a (int)(x+y) (int)6.2%4=2
自增:
i++,先赋值再加1
++i.先加1再赋值
int x = 500;
System.out.println(x++); //x++=500
System.out.println(x); //x=501
int y = 100;
System.out.println(++y); //++y=101
System.out.println(y); //y=101
自减:
i—,先赋值再减1
—I,先减1再赋值
赋值表达式=左边必须是变量名,若两边变量类型不同,在赋值时候要根据左边变量的类型进行转换
少字节—>多字节
1若多字节变量为unsigned,则转换后多余字节补0
short int a = -1;
unsigned long b;
b=a;
a: 11111111
b:00000000 11111111
2若多字节变量为有符号型,则转换后扩展少字节的最高位,转换后数据的符号不变
short int a = -1;
long b;
b=a;
a: 11111111
b:11111111 11111111
多字节—>少字节:低位照搬
int a=-1; int a=65535;
short int b; short int b;
b=a; //b=-1 b=a;//b=-1
a:11111111 11111111
b: 11111111
复合的赋值运算符
a+=3 a=a+3
x*=y+3 x=x*(y+3)
x/=x-4 x=x/(x-4)
赋值表达式
a=b=5; b=5 a=5
“=”的结合性为从右到左
关系运算符:
< > <= >=的优先级大于== !=,算术运算符的优先级大于关系运算符的优先级
关系表达式:结果只有真和假,即1和0.
逻辑运算符:
与&& 或|| 非!
优先级:!—>算术—>关系—>逻辑—>赋值—>逗号
作为条件,所有非0值均为真;作为结果,只有0或1 两种 5>3&&2||8<4-!0
sizeof()运算符,用于计算某一个操作数类型的字节数
sizeof(int) //4
sizeof(float)//4
sizeof(double)//8
sizeof(char)//1
逗号运算符:顺序求解,结果为最后一个表达式的值,并且优先级最低