第一章 基本数据类型和表达式C++数据类型为什么要分数据类型 不同的数据类型存储格式不同。
不同的数据类型所实施的操作不同C++数据类型1、整形数据各种整形数据的基本情况数据类型 占用字节(跟编译器有关)数据范围short2 bytes -32768~32767 unsigned short2 bytes0~65535int 2bytes(16位机) 4 bytes(32位机) -32768~32767 -(231)~231-1 unsigned int2bytes(16位机) 4bytes(32位机)0~65535 0~232-1long 4bytes -(231)~231-1 unsigned long4 bytes0~232-1整形常量在整形常量后可加修饰符l 或L 表示长整型基本类型实型(浮点型)双精度型(double)十进制整数:以非零的数字开始123//signed int65000//unsigned int123u//unsigned int123L//singed long int八进制整数:以零开始0123=83//unsigned int011L=9//unsigned long int十六进制整数:以0X或0x开始0x123=291//signed int0X123u=291//unsigned int整型变量类型修饰符变量名[=表达式][,变量名[=表达式]]int x,y;int i=1,j=0;2字符型数据字符型数据的基本情况字符类型:在内部实现是个单字节长度的整型,因此常用字符型定义值较小的整数。
单引号括起来的一个字符如’a’,’D’,’?’,’S’字符数据在内存中的存储形式以ASCII码存储,占1字节,用7位用于表示字符时存放的是字符的ASCII码值。
数据类型占用字节数据范围char 1Byte -128~127 unsigned char 1Byte 0~255转义字符转义序列对应ASCII码值对应功能或字符转义序列对应ASCII码值对应功能或字符\b 8 退格\’39 单引号\f 12 换页\’’34 双引号\n 10 换行\? 63 问好\r 13 回车\ccc ccc为八进制值该值对应的字符\t 9 水平制表\\xhh hh为十六进制值该值对应的字符字符变量用来存放字符常量例:char c1,c2;c1=’a’;c2=’A’;字符型和整形的关系字符数据和整形数据之间可以通用,可以按字符形式输出,也可以按整形输出。
#include<iostream.h>main() Array {char c1,c2;c1=’a’;c2=’b’;printf(“%c%c\n”,c1,c2);printf(“%d%d\n”,c1,c2);}#include<iostream.h>void main(){int a,b;a=’a’;b=’b’;c=97;d=98;c=a-32;d=b-32;a=a-32;b=b-32;cout<<a<<“”<<b<<“”<<int(c)<< “”<<int(d)<<endl;cout<<char(a)<<“”<<char(b)<<“”<<c<< “”<<d<<endl;}枚举型将需要的变量值一一列举出来,构成一个枚举类型。
enmu 枚举名{变量值类表};例如:enum weekday{sun,mom,tue,wed,thu,fri,sat};#include<iostream.h>void main(){enum color{red,green,blue}; //red=0,greed=1,blue=2color paintbrush=red; //ok//color paintbrush=0;//error//color paintbrush; paintbrush=red;//ok// paintbrush=0;//error if(paintbrush==0) // paintbrush==red//ok cout<<”red paintbrush ”<<endl; }实型数据实行数据数据类型 占用字节 精度 有效数字位数float 4 3.4×10±387double 8 1.7×10±30815 long double104.3×10±492319float 实行变量列表 double 实型变量列表 long double 实型变量列表#define PRICE 30#include<iostream.h> void main() {int num,total; float v,r,h; num=10;total=num*PRICE; cout<<total<<endl; r=2.1; h=3.3;v=3.14159*r*r*h; cout<<v<<endl; }符号常数与常值变量符号常数:用制定名字代表的常数。
#define MAXLINE 100可读性好,修改方便在预编译时将程序中凡出现MAXLINE 的地方全部用100代替。
尽管他具有常量的所有属性,但是在编译预处理完成后,MAXLINE 就不属于程序中的名字了,所以提不是一个具有一定类型的常量名(在C++中只为了兼容菜保留#define )。
常值变量const float PI=3.141592653; //PI=3.141593const double PI=3.141592653; //ok定义成const后的变量,程序中对其只能读不能修改。
因此常量定义是必须初始化。
const flout PI;PI=3.141592653; //error数值表达式算术运算符基本算术运算符:+ - * / %(取余)强制类型转换:例:(double)a, double (a), (int) (x+y), (float) (5%3)变量本身未变化.位运算符按位与:&将某一位置0,其他位不变。
例:将char型变量啊的最低位置0.a=a&0376; //a&11 111 110B取指定位。
例:有char c; int a; 取出a的低字节,置于c中。
c=a&0377; //a&11 111 111B按位或:|将某些位置1,其他位不变。
例:将int型变量a的低字节置1。
a=a|0xff;按位异或:^使特定位翻转(与0异或保持原值,与1异或取反)。
例:要使01111010B第四位翻转;01111010B(^)00001111B01110101B左移运算:<<左移后,低位补0,高位舍弃。
右移运算:>>右移后,低位舍去,高位无符号数补0;有符号数补0 ;(逻辑右移)有符号数补“符号位”(算术右移)取反:~例:将int型数据a最低位置0;a=a&~1; //~1=11……10B自增、自减运算表达式++表达式表达式++--表达式表达式--具有副作用int a=3;int b=++a; // a=a+1;b=a;int c=a++; //c=a;a=a+1;int b=--a; //a=a-1;b=a;int c=a--; //c=a;a=a-1;int b=++a++; //error,a++非左值int d=++++a; //ok,d=5int d=++3; //errorint c=(++a)++; //ok,++a为左值,c=4int c=(--a)--; //ok,--a为左值,c=2赋值类运算表达式赋值类运算符:= += -= *= /= %= &= |= ~= >>= <<= ^=左值op=表达式等价于左值=左值op表达式●其中,左值:变量,数组元素,类成员,结构成员,*p具有副作用由混合类型计算引起的类型转换成为自动类型转换,不需要再程序里明确说明。
自动类型转换的原则:把表示范围小的类型的值转换为表示范围大的类型的值。
类型转换的顺序从小到大是:int long float double long double“=”两侧类型不一致时,要进行类型转换:整形=实型:截掉小数部分。
实型=整形:数值不变,存为浮点。
整形=字符型:存入整形低8位,0或符号位扩展存入高8位(与机器有关)。
long int=int:符号位扩展。
int=long int:long int低16位存入int。
long int=unsigned int:高位补0。
整形=(字节数相同的)unsigned整形:原样送入,若超过整形表示范围,会出错。
unsigned=(字节数相同的)非sunsigned模型:原样送入,符号位也作为数值。
其他运算符sizeof -> ±& new deletesizeof(类型名)或sizeof(表达式):求变量、类型所占的字节数。
#include<iostream.h>void main(){cout<<”sizeof(char)=”<<sizeof(char)<<endl<<”sizeof(int)=”<<sizeof(int)<<endl<<”sizeof(unsigned)=”<<sizeof(unsigned int)<<endl<<”sizeof(long)=”<<sizeof(long int)<<endl;}运算符的优先级和结合型详解:符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。
C语言运算符优先级顺口溜[转]醋坛酸味灌,味落跳福豆。
(共44个运算符)醋-初等,4个: ( ) [ ] -> 指向结构体成员 . 结构体成员坛-单目,9个: ! ~ ++ -- -负号 (类型)*指针 &取地址 sizeof 长度(自右向左)酸-算术,5个: * / % + -减味-位移,2个: << >>灌-关系,6个: < <= > >= == 等于 != 不等于味-位逻,3个: & 按位与 ^ 按位异或 | 按位或落-逻辑,2个: && 逻辑与 || 逻辑或跳-条件,1个,三目: ? : (结合方向:自右向左)福-赋值,11个: = += -= *= /= %= >>= <<= &= ^= |= (结合方向:自右向左)豆-逗号,1个: ,结合方向自右向左的只有三类:赋值、单目和三目,其它的都是从左至右结合。