大一上第一学期期中复习知识点梳理 之 c++基础知识
一、进制
1)进制介绍

16进制:最多两位,最大为7F;
8进制表的ascii最高为127.
2)进制转换

PS/颠倒输出某整数的16进制形式:
int a16[32];int sum=0; while(a) { a16[++sum]=a%16; if(a16[sum]<10) {a16[sum]=49+a16[sum]-1;} else if(a16[sum]>=10){a16[sum]=65+a16[sum]-10; } a/=16; } cout<<"0x"; for(int i=1;i<=sum;i++) { char t=a16[i]; cout<<t; }
int n; m=a; while(m>0) { n=m&15; if(n<10) cout<<n; else cout<<char(87+n); m=m>>4; }
3)进制前缀(整型常量int类型)

4)进制转义序列字符及含义(char类型)
'\nnn' 八进制表示 用八进制ASCII码表示字符
'\xnn' 十六进制表示 用十六进制ASCII码表示字符
5)输入输出进制控制

进制前缀showbase:输出时不加则默认不显示前缀,加上才显示前缀(例如0x)。
输出格式1:cout(<<showbase)<<hex<<a<<endl;
输出格式2:cout(<<showbase)<<setbase(16)<<a<<endl;
使用setbase函数输出8,10,16进制,头文件iomanip。
二、浮点型
1)科学计数法表示(指数形式)
尾数+E或e+阶数
例:-0.34e-2; 1e3.
要求:尾数部分必须有数字,指数(阶数)部分必须为整数 。
2)精度后缀:F或f结尾
注意:小数实数常量默认按double存储(float存精度小丢失);
例:float f=-3.14F(强制按单精度存储) ; double f=-3.14 .
3)浮点数格式控制
注意:一旦使用之后都是对当前整个程序有效,之后如果不想要此格式需改!!!


例子:输出5位小数: cout<<fixed<<setprecision(5)<<a;(一定记得fixed加在前面)
输出科学计数法表示的5位小数: cout<<scientific<<setprecision(5)<<a;(此不需要加fixed啦)
三、字符和字符串
1、字符
1)字符型常量
用''(单引号)引起的单个字符,char类型.

特殊字符:'\n'换行符(回新行); '\r'回车符(回开头); '\t' 制表符 ; '\0' 字符串结束符(可不写系统自带)
2)字符的输入输出
I)cin输入数据
cin>>a1>>a2>>a3;
II)cin.get()函数输入数据:将输入的所有字符(包括间隔符)都作为输入字符赋给字符变量,一次只能提取一个字符的值。
例如:cin.get(a1); cin.get(a2); cin.get(a3);
III)输出数据间+间隔:“ ”或’ ‘或’\t‘或’\n‘或endl;
3)字符数组
数组中元素为字符。初始化:char name[]={'N','a','n','j','i','n','g'};
也可以用字符串常量初始化:char name[]="Nanjing";(注意:最后会多出一个字符’\0’,故字符数组大小定义应注意多出结束符的空间)。
2、字符串
1)字符串常量
用“”(双引号)引起的若干个字符,char a[] /string类型.

注意:'\0'(ASCII码值为0)为自带,例如,在sizeof("1234")=5,字符串实际为“1234\0”.
注:若只有结束字符则为空字符
注意:例如,“\1234\n”显示的结果为 S4(回车),原因为8进制表示的ASCII码最多为127(2^7-1),16进制表示的ASCII码最多为7F(最多两位)(2^7-1)。
2)字符串的输入输出
cin.getline(s,n); s:字符数组名称;n:读入字符的最多个数(包含'\0')。
getline()以回车作为结束,在此之前输入的所有字符都会放入字符数组。
例:char city[11]; cin.getline(city,10); cout<<city<<endl;
3)字符数组与字符串处理
头文件<cstring>
strlen(s):字符串s的实际长度(不包括‘\0’)
strcpy(s1,s2):字符串s2中‘\0’之前的所有字符依次赋值到s1中,最后再加上一个'\0'。
(注意:由于不能直接给字符数组名赋值,因此将一个字符串的值赋给另一个字符串时必须用字符串赋值函数完成)

例如:char string2[20]; strcpy(string2,"VC++"); 而不是string2="VC++";
注意:sizeof():计算字符串长度包含结束符;strlen():计算字符串长度为结束符前长度,不包含结束符。即strlen()+1==sizeof()。
四、变量和常量
1、变量
1)变量定义(说明):
英文字母、数字、下划线组成;
至少含一个英文字母;
首字母必须为英文字母或下划线;
英文字母区分大小写;
唯一性。
2)常变量: 说明符const修饰。
3)变量初始化:
int x=5; 或 int x(5);
=是初始化符号; ()也是初始化符号(仅c++中)
=用处:
int x=5; =为初始化符号;
x=7; =为赋值运算符。
2、文字常量的范围、精度后缀:
长整型常数:L或l结尾
无符号常整数:U或u结尾
无符号长整型常数:UL或LU(大小写均可)结尾
浮点型常熟:F或f结尾
五、运算符
1、类别

条件运算符:表达式a?表达式b:表达式c; 即表达式a若成立,执行表达式b,否则执行表达式c。
2、操作数要求与影响
1)要求:
3、类型不匹配时数据类型提升
1)强制类型转换
(type)表达式 或 type(表达式)。
强制类型转换不改变本身的值。
2)字符数据赋值给整型数据
对于无符号字符数据,低位字节不变,高位字节补0;对于有符号字符数据,若符号位为0,则与无符号字符数据转换规则相同,若符号位为1,则低位字节不变,高位字节全部置3)一般的提升规则


1)向大的类型靠:
char + int = int ; int + long long = long long ; int + float = float ; int + double = double .
2)至少是int:
short + short = int ; short + char = int ; char + char = int .
4、优先级与结合性

关系运算符 >、<、>=、<= 优先于 ==、!=。
位运算符 ~ 优先于 << 优先于 >> 优先于 & 优先于 ^ 优先于 | 。
整体优先关系:算术 > 比较 > 逻辑 > 自增减 > 赋值 > 位运算 > 移位 > 条件 > 逗号 > 内存操作 > 指针 > 成员与限定。
优先关系::: (域运算)【→】 优先于 成员运算【→】、()(括号、函数调用、类型构造)【→】、[ ](数组下标)【→】、++\--(后置递增\减)【→】、类型转换运算【→】 优先于 sizeof(对象\类型大小)【←】、++\--(前置递增\减)【←】、~(按位取反)【←】、!(逻辑非)【←】、+\-(单目正\负)【←】、*(间接引用)【←】、&(取地址)【←】、new(分配对象\分配并初始化对象\分配数组)【←】、delete(释放对象\释放数组)【←】、(type)或type()(强制类型转换)【←】 优先于 ->*(间接访问指针指向的类成员)【→】、.*(直接访问指针指向的类成员)【→】 优先于 *(乘)【→】、/(除)【→】、%(求余)【→】 优先于 +(加)【→】、-(减)【→】 优先于 <<\>>(按位左\右移)【→】优先于<\<=\>\>=(比较大小)【→】优先于 ==\!=(比较是否相等)【→】 优先于 &(按位与)【→】 优先于 ^(按位异或)【→】 优先于 |(按位或)【→】 优先于 &&(逻辑与)【→】 优先于 ||(逻辑或)【→】 优先于 ?:(条件运算)【←】 优先于 =(赋值)【←】、+=\-=\*=\/=\%=\<<=\>>=/&=\|=\^=(复合赋值)【←】 优先于 throw(抛出异常)【←】 优先于 ,(逗号)【→】
注意:有无符号数影响可能产生完全相反结果。
PS/连续比较问题:
1)语法上正确。
2)语义上不一定是所想要的。 例如: 0<x<5 等价于 (0<x)<5 等价于(0或1)<5 一定成立 结果一定为1。 若想表示x是否在0和5之间:正确写法为 0<x&&x<5.
x==y==0 等价于 (x==y)==0 ,如果x与y相等,1==0,结果为0;如果不等,0==0,结果为1; 正确写法:x==0&&y==0.
PS/"=="错写成"=":
if(x=0) 语法正确,语义错误:0赋值给x,返回0,if永远不成立。
if(x=1) 语法正确,语义错误:1赋值给x,返回1,if永远成立。
while(x=1) 导致死循环
while(x=0) 导致不进入循环
PS/短路运算:
&&、|| 只要左边决定了运算,结果右边不计算。
a||b:若a为true,b不计算 ;a&&b:若a为false,b不计算。
利用:if(count>0&&sum/count>5) 避免了除0的情况
前自增自减:先加减后返回;后自增自减:先返回后加减,等所有执行完语句再加减。
PS/连续简单赋值:
逆向结合性+返回值是赋值后的结果。
x=y=z=0; 等价于 x=(y=(z=0));
六、基本数据类型
1、关键字
具有特定含义的全由小写字母组成的英文单词。
and "&&" and_eq "&=" bitand "&" bitor "|" compl "~" not "!" or "||" or_eq "|=" xor "^" xor_eq "^=" not_eq "!="
2、标识符
由字母和下划线开始;
由字母、数字或下划线组成;
用户自定义标识符时不能使用关键字,也不能与库函数名、类名、对象名等同名。
3、标点符号
分隔符作用的符号:标点符号、运算符、空格符、制表符、回车符等。
2、基本数据类型
整型:处理整数。整数(不加说明时指有符号整数)在内存中存放的是它的补码;无符号整数没有符号位,存放的就是原码。
(单)字符型:处理字符,存储的是该字符的ASCII码,占用一个字节。数据本质上也是整数,可以是任何一个8位二进制整数。
汉语系字符:双字节字符集,每个字符用2个字符编码。
单精度型、双精度型:都用来处理实数,两者表示的实数精度不同。实数在内存中以规范化的浮点数形式存储,包括尾数+数符+阶码。数的精度取决于尾数的位数。32位机上单精度型为23位(实际24位),双精度型为52位(实际53位)。
布尔型(逻辑型):处理逻辑值,其取值只有true和false。可以和整型相互转换,false对应0,true对应1或非0。
可以加上修饰词:signed、unsigned、long、short。
int和char默认有符号。



2、数据类型定义别名
类型别名(typedef)
例:typedef unsigned char BYTE;
则unsigned char a; 等价于 typedef a;
七、数据输出间隔处理
1、空格:' ' or " " or '\t' .
2、回车换行:'\n' or endl.
3、setw():指定输出数据项的宽度
头文件:#include<iomanip>
注意:仅对后一个数有效!
例:int i=2,j=3;cout<<setw(6)<<i<<setw(10)<<j<<endl;
()中为一个正整数值,限定了紧跟其后的一个数据项的输出宽度。若数据实际宽度小于指定宽度,则按右对齐在左边留空;若数据实际宽度大于指定宽度,则按实际宽度输出,即指定宽度失效。
八、原码、反码、补码、移码
1、原码:有符号
最高位表示正负,0正1负;其余位绝对值。
正数不变,负数表2^(n-1)+|x|(-2^n-1<x<0)。
0表示不唯一;加减不便需转换。0分正负不唯一: [+0]原=(00000000)2=0;[-0]原=(10000000)2。
2、反码:有符号
最高位表正负,0正1负;其余位正取原值,负对|x|各位取反。
负表示2^(n-1)+x(-2^(n-1)<x<0)。
0表示不唯一;加减简单。
3、补码:有符号(n=8)
最高位正负,0正1负;其余位,正取原值,负取补2^n-1-|x|。
负数表示2^n+x(-2^(n-1)<=x<0)。
0表示唯一;加减简单。
trick:反码+1=补码(二进制)
4、移码:有符号(偏移2^7=128)
无符号位,真值加上固定偏移(例如:加2^(n-1)+x)
0表示唯一,但不是全0。
比较运算简单,加减稍繁。
trick:移码=补码符号位取反。
PS/原、反、补码中正数都不变;仅补码、移码中0表示唯一。

浙公网安备 33010602011771号