程序设计复习——基础概念

本文详细介绍了C++中的基本数据类型,包括整型、实型、字符型和枚举类型,强调了类型转换、进制表示以及变量赋值的规则。此外,还探讨了位运算、存储类型如auto、register、extern和static的作用。最后,提到了符号常量的使用以及STL中的string。通过实例解析了各种运算的优先级和类型转换细节,帮助读者深入理解C++的基础概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、常量与变量

  • 变量名、常量名、函数名(你自己取的那种)统称标识名,标识名只能以字母或下划线开头,中间只能用字母数字下划线;不可以是系统保留字如int、return等。

  • 变量赋值:int a = 10; int a (10);记得要习惯性赋初始值哦。

  • 不同的数据类型的存在是为了便于处理数据。

1、整型

整型类型类型名空间范围
基本整型int4byte-231~231-1
无符号基本整型unsigned [int]4byte0~232-1
短整型short [int]2byte-215~215-1
无符号短整型unsigned short [int]2byte0~216-1
长整型long [int]4byte-231~231-1
无符号长整型unsigned long [int]4byte0~232-1

方括号内可省略,定义语言如下:

short int shortnum;
short shortnum;
unsigned short count;
进制

0b或者0B开头:2进制
0开头:8进制
0x开头:16进制
10进制不带前缀。

2、实型

实型(浮点型)有效数字空间范围精度
单精度float十进制六位有效数字1byte指数,3byte尾数2-128~2128/10-37-1038二进制24位,十进制6-7位
双精度double十位有效数字3byte指数,5byte尾数
长双精度long double十位有效数字3byte指数,5byte尾数

3、字符型char

存一个字母或符号,占一个字节,存内码 (ASCII:用的16进制,表格读取是行+列,eg:a是61=616+1,大写和小写字母连续存储;包含可打印和非打印字符(控制字符))*
非打印字符:控制字符
可打印字符:单引号括起来的数据 eg:‘a’,‘S’,‘2’;而双引号表示字符串。

赋值

char c1,c2;
c1 = 'a';
c2 = 97;
//c1==c2
  • c=1和c=’1‘不一样。c='1’里面存的是1这个字符的内码。
  • 另:0-9的字符依次存放,用于高精度的计算。用字符串存……两个数位相加用(c1-‘0’+c2-‘0’+‘0’)
  • 输出用"c"和’c’有什么区别?是字符串和字符类型的区别吧
转义字符

非打印字符用转义字符(加\的那种)表示:
换行符 \n
要输出单双引号,在要打印的符号前加" \ ",单个的可以直接搞

cout<<"\"abc\""<<endl;

八进制数转义序列 \a 没懂什么意思
水平制表 (tab?) \t(注意用\t的时候可以自动调整缩进,意思是它是右对齐的,而不是一定有多少空格)
退一格 \b
回车 \r
换页 \f

字符数组

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

char ch[100005];
char c;
cin>>ch;//意思是读入字符串
//可以用strlen(ch),得到的是字符串长度,实际字符个数;
cin.getchar(c);//可读入空格
cin.getline(ch);//可读入带空格的字符串,默认到回车结束,但是可以
cin.getline(ch,len,'.');//意思是读len个,到'.'结束

注意:字符数组赋值

int main(){
	char s[]={'1','2','\0'};//要么s里面加长度,是字符个数+1,要么后面自己加个\0,否则\0会被乱加!!!!然后输出就很混乱!!!!
	cout<<s<<endl;
	return 0;
}

4、枚举类型

用于有限可数的对象
1、用数字代替
2、define
3、新的数据类型

定义新的数据类型:

enum weekdayT{Sunday,Monday,Tuesday,Wednesday,Thursday}//定义了数据类型,类型名是weekdayT,里面可以存的东西是这几个玩意
weekdayT weekday;//int weekday;
weekday = Sunday;//赋值

不可以直接输出Sunday等字符,输出的还是数字吧应该,因为内部存储还是数字

typedef int INTEGER;//换语言了不想改习惯可以这样用

5、用类(class)定义数据类型

(第十章)

查内存
sizeof(int);//数据类型占的内存量
sizeof('a'+15);//计算结果所占的内存量

6、符号常量

const int N = 20000const double PI = 3.14159;//需要定义类型哦
#define 符号常量 字符串
#define PI 3.14 //当作字符串处理了……就是一个替换的作用
#define A 3+5;
int B;
B = A*2;//B=13

二、算数表达式

1、常识

  • 赋值表达式的值等于右边表达式的值, 赋值运算符是右结合
  • 类型自动转换:右边的数塞到左边的类型里面,实型丢小数部分,整型到字符型是取最低八位
  • “-”可以为一元运算!!!意思是可以表示取负数吧
  • 实型常量为double,如写小数3.5就是double类型
  • i++是搞完再++;++i是先++再搞事
  • 用+= -=的计算效率更高(?)
	int k=2;
 	k *= 2+1000;
 	cout<<k<<endl;//是先算完了表达式再去*!!!!
 	//不会真的有人把k设成1吧

关于STL :
vector 返回的是unsigned
-1变unsigned 不是-1了!!!!

2、不同类型变量做运算

  • 占空间向大的靠拢,数值范围向大的靠拢
    eg:
    整+double=double;
    整/整=整;
    float+double=double;
    bool,short,char 都变成int参与计算;
    int +unsigned int = unsigned int;

  • 字符型 -> 整型变量:将字符型数据放入整型变量的最后一个字节。如果所用系统将字符处理成无符号量,则前面补0。如果所用系统将字符处理成有符号量,则扩展符号。

  • 当用到多重赋值时,要保证所有的变量都是同类型的,以避免在自动类型转换时出现与预期不相符的结果的可能性。如变量d定义为double,变量i定义为int,语句 d = i = 1.5; 的结果是:i等于1,d等于1.0 。

强制转换:

//不要写
a = (double(x/y);//没有意义

3、优先级

互联网,你伤我好深
!运算
算术运算(±*/)
关系运算(> < >= <=)
关系运算2(== !=)
赋值运算(=)
&& 运算
| | 运算

位运算不知道放哪
在这里插入图片描述

三、位运算

在这里插入图片描述在这里插入图片描述不管原来的数是正还是负,取反得到的结果总是原数相反数-1。(取反的时候符号位也取反了)
在这里插入图片描述注意这里,左移右移只是一个运算表达式,并没有改变A的实际值,所以不用担心对A造成影响。
在这里插入图片描述对于负数,补符号位:如果A=-60,现在A的原码1 011 1100,二进制补码1 100 0100(符号位不变!)。右移两位,是1 111 0001,写成原码是1 000 1111,写成十进制是-(1+2+4+8)=-15.
现在问题是,为什么可以出240……在检测“二进制位包含符号位否”的试验中遇到的问题
在这里插入图片描述

四、存储类型:

自动变量:auto
寄存器变量:register
外部变量:extern
静态变量:static

1、auto

  • 在函数内或块内定义的变量缺省时是auto。如auto int i;
    当进入块时,系统为自动变量分配空间。当退出块时,系统释放分配给自动变量的值。因此自动变量的值就消失了。当再次进入该块时,系统重新分配空间。
  • 注意:C++98中的auto多余且极少使用,C++11中auto被用于自动推断被定义变量类型,自动变量无需再用auto说明。

2、register

  • 存储在寄存器中,代替自动变量或形参,可以提高变量的访问速度。如无合适的寄存器可用,则编译器把它设为自动变量。
  • 现在的编译器具有一定的智能,能够识别频繁使用的变量并进行优化。
  • 注意:只有局部自动变量才能定义为寄存器变量,全局变量和静态局部变量不能定义。

3、extern

  • 声明一个不在作用范围内的全局变量。如:extern int num; num为某一个全局变量。
  • 用途:
    1.在某函数中引用了一个声明在本函数后的全局变量时,需要在函数内用extern声明此全局变量。(函数内用函数外的变量)(main里面的也是局部不是全局)
    2.当一个程序有多个源文件组成时,用extern可引用另一文件中的全局变量。(文件内用文件外的变量)
  • 教材118页说“类型名可省略”现在不可以

4、static

  • 为在整个程序的运行期间都存在的变量限定访问范围。
  • 两类静态变量:
    1、静态的局部变量,函数里的局部变量在函数用完以后是不释放的(局部静态变量的初值是编译时赋的。当运行时重复调用此函数时,不重复赋初值。虽然局部静态变量在函数调用结束后仍然存在,但其它函数不能引用它。)
    2、静态的外部变量static int x;//全局(外部)static,作用是不让别的程序extern引用它。
  • 生存期相同,作用域不同(语句块内,文件内)
    在这里插入图片描述

五、STL

string

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值