版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章开始学习C++补充内容C++程序设计——大模型思维与实践2变量定义及初始化原码和补码2-3-22-4-1变量命名规则2-3-1
信息的表示与存储2-4-2
信息的表示与存储2-4-33变量名是用于标识和引用变量的名称。变量名命名规则有:由字母、数字和下划线等字符组成,不能以数字开头。例如:sum、Count、_self为合法的变量名,而2ndClass不能作为变量名,因为以数字开头。C++语言提供的保留关键字(下图)不能用作变量名。注意,常见的cout、cin、define等标识符非保留关键字,可以用于自定义标识符(包括变量名、函数名)的名称。为了提高代码的可读性和可维护性,程序员应遵循一些命名最佳实践。例如:使用见名知意的变量名。在实际使用时,尽量不用诸如a、b等变量名。使用小驼峰命名法或下划线分隔符区分不同的单词等。小驼峰命名法中,首字母小写,后续单词的首字母大写,如totalAmount、getUserInfo、calculateTotal等。注意:C++中对于标识符中的大小写敏感,例如age和Age是两个不同的变量名,main和Main是两个不同的函数名。2-3-1变量命令规则4在C++中,变量的初始化可以通过多种方式进行,包括直接初始化(也称为括号初始化)和列表初始化。以下是这两种初始化方式的变量定义语句格式:直接初始化(括号初始化)直接初始化使用圆括号()初始化变量。这种初始化方式在C++的早期版本中就已经存在。定义格式为:类型名称
变量名1(初始化值1)[,变量名2(初始化值2),...];inta(10),sum(0);//整型变量a初始化为10,sum初始化为0doubleb(3.14);//双精度变量b初始化为3.14列表初始化(C++11及以后版本)列表初始化使用花括号{}初始化变量。这种初始化方式更加现代,提供了更清晰的语法,并且可以用于初始化更复杂的数据结构,如数组和容器。定义格式为:类型名称
变量名1{初始化值1}[,变量名2{初始化值2},...];或者:类型名称
变量名1={初始化值1}[,变量名2{初始化值2},...];inta{10},sum{0};//整型变量a初始化为10,sum初始化为0doubleb={3.14};//双精度变量b初始化为3.142-3-2变量定义及初始化5在C++11标准中,auto关键字的引入极大地简化了变量的声明过程,特别是在处理复杂数据类型时。auto允许编译器基于其初始化表达式自动推断变量的类型。在C++11之前,我们需要显式地声明每个变量的类型。然而,有时变量的类型可能非常复杂,使用auto可以简化这一过程。简单示例:autox=5;//x被推断为int类型
autoy=3.14;//y被推断为double类型在上面的例子中,编译器根据赋值给变量的值自动确定了变量的类型。变量的auto声明6整数的表示需要转换成二进制编码。这里考虑有符号整数的编码(需要存储正号和负号),有三种常见的编码方式:原码、反码和补码。这些编码方式用于处理正数和负数的表示和运算。原码是一种直观的表示方法,其中最高位(第1位)用作符号位,0表示正数,1表示负数。剩下的位表示数值本身。例如,以8位二进制数为例,数字62和-62的原码表示如下:62的二进制表示为00111110(最高位0表示正数,后面7位表示62)。-62的二进制表示为10111110(最高位1表示负数,后面7位表示62)。用16位二进制表示数值则为(实际中可能使用更多位,如32位或64位,原理相同):62的二进制表示为0000000000111110-62的二进制表示为1000000000111110根据以上表示方式,8位二进制数中,负数的运算规则与正数不同,计算机硬件的设计相对复杂。2-4-1原码和补码7补码是现代计算机中最常用的表示方法,它允许负数的加法和减法运算与正数的运算相同。补码和原码相同,最高位(第1位)用作符号位,0表示正数,1表示负数。这是一个8位的二进制数轴,其范围从00000000(十进制0)到11111111(十进制255)。它们被分为两部分:正数和零:从00000000(0)到01111111(127),这128个数表示非负整数。负数:从10000000到11111111,这128个数(虽然二进制看起来像是更“大”的数,但因为第1位符号位为1,在补码中代表负数),用于表示从-128到-1的负整数。原码和补码8在二进制补码中,从数轴的00000000(0)开始向右,每走一个单位,表示增加1,逐步变为00000001(1)、00000010(2),一直到01111111(127)。此时,01111111(127)加1,变成10000000(128),在补码表示法中,10000000表示-128。这里发生了“溢出”,因为二进制数从最大的正数(127)跳到了最小的负数(-128)。从-128开始,继续向右,逐步加1,会得到-127、-126,依此类推,直到回到0,完成一个循环。原码和补码9图的下部为时区与时间的关系:地球被划分为24个时区,每个时区代表一个小时。从西向东旅行,每穿过一个时区,时间就增加一小时。这种增加可以看作是“加法”操作。图中,中时区(0度经线)当前时间为1月2日0点,东一区为1月2日1点,东二区为2点,东十二区为1月2日中午12点(当前地球上最晚的时间)。继续向东,将穿过国际日期变更线,时间突然回拨24小时,回到1月1日中午12点(当前地球上最早的时间)。这就像是补码中的“溢出”现象。原码和补码10对于补码,主要需要理解两个与溢出相关的问题:(1)一个最大的正数加1会得到一个最小的负数。(2)在数轴中,左边一半为正数,右边一半为负数。如果两个正数相加,可能得到负数。例如,8位二进制表示的补码中,100加100得到200,而200对应的补码为负数(在数轴的右半部分)。原码和补码11整型数据在计算机中的存储方式多种多样,根据位数的不同,常见的有8位、16位、32位、64位等。以下是C++中的几种基本整型:int类型int是C++中最常用的整型,它表示一个带符号的整数。通常是32位(4字节)。int类型的值在内存中以二进制形式存储,最高位是符号位(0表示正数,1表示负数),其余31位用于表示数值。因此,int表示的数值范围为-231到231
–1(即从-2,147,483,648到2,147,483,647,为2*109量级)。如果尝试将超出此范围的数值存储到int类型的变量中,将会发生溢出,导致结果不正确。longlong类型longlong是C++中提供的最大范围的带符号整数类型。longlong是64位(8字节),其范围是从-263到263-1,为9*1018量级。无符号整数C++还提供了这些整型的无符号版本,即只有正数和0,没有负数。可以在类型前添加unsigned关键字,如unsignedint,表示无符号int类型,它的范围从0开始,到232-1。其它short是一个带符号的整数类型,通常比int占用更少的存储空间。short通常是16位(2字节),其范围是-215到215
-1(即从-32,768到32,767)。long是一个带符号的整数类型,通常比int占用更多的存储空间(32位或64位),以提供更大的数值范围。在通常选择整型数据类型时,若无需特别关注数字规模,int类型常作为首选。尽管对于很小的数字,short类型足够存储,且能占用更少内存,一般也不考虑使用short类型。而如果超出int类型的表示范围,则需要选择longlong。2-4-2整数类型的选择与溢出问题12【例1】表示整数时数据类型的选择。若需存储一个城市比如上海的人口数量,鉴于其量级通常在几千万以内,使用int类型足以应对。对于像中国这样拥有14亿人口(即1.4×109)的国家,由于14亿的数值已逼近int类型的表示范围上限,虽然使用int勉强可行,但如果担心溢出,建议直接使用longlong。面对更大规模的数据,如全球总人口数达到70亿(即7×109),则必须采用longlong类型。在进行整数运算时,需要更加当心数据的表示范围,以避免溢出问题。溢出是指运算结果超出了数据类型所能表示的范围,从而导致结果不正确或程序异常。整数类型的选择与溢出问题13【例2】short类型数据最大到32767,在最大数的基础上加1,观察结果。#include<iostream>usingnamespacestd;intmain(){ shortresult; result=32767; result=result+1; cout<<result<<endl;return0;}以上代码中,定义了一个short类型的变量result。short类型表示范围为-32,768到32,767。当result赋值为32,767时,再加1会导致溢出。溢出后会循环回到最小值-32,768。因此,result的值将变为-32,768。整数类型的选择与溢出问题14【例3】一个int型变量最多只能表示231–1,计算阶乘时,13的阶乘已经超出范围。
#include<iostream>usingnamespacestd;intmain(){ intresult; result=1*2*3*4*5*6*7*8*9*10*11*12; cout<<"12!="<<result<<endl; result=result*13; cout<<"13!="<<result<<endl;return0;}以上代码中,计算了12的阶乘(12!)和13的阶乘(13!),并将结果存储在一个int类型的变量result中。12!的值是479,001,600,在int类型的表示范围内,因此不会发生溢出。13!的值是6,227,020,800,超出了int类型的表示范围(2,147,483,647),因此会发生溢出。整数类型的选择与溢出问题15【例4】输入一个不超过10000的整数,表示立方体的边长,请计算立方体的体积并输出。#include<iostream>usingnamespacestd;intmain(){intlen;cin>>len;intvolume=len*len*len;cout<<"立方体的体积是:"<<volume<<endl;return0;}当输入10000时,输出的结果为负数,可知发生了溢出。虽然输入的值并不大,但是计算出来的体积超出了int类型的表示范围。整数类型的选择与溢出问题16double类型专用于表示包含小数部分的数值,涵盖了正数、负数和零的广泛范围。在多数当代编译器及计算平台上,double类型以64位(即8个字节)的二进制形式存储。处理需要高精度浮点数运算时不可或缺。float类型以其紧凑的32位(即4个字节)二进制表示,同样有效地表示了带有小数部分的数值,包括正数、负数和零。这种设计使得float成为内存资源有限时的理想选择。2-4-3浮点类型的选择与精度问题
17
在计算机系统中,浮点数遵循一种特殊的a*2^b格式进行存储,其中a称为尾数(或有效数字),而b称为指数。这种表示方法极大地减少了存储复杂小数所需的空间,仅需记录尾数和指数即可。以十进制为例,实数2.3*10^8可以简化为存储2.3(尾数)和8(指数)。float类型32位的存储空间中,最高位是符号位,用于指示数值的正负,其中0代表正数,1代表负数。紧接着符号位的是8位的指数部分,用于表示数值的指数大小。剩下的23位则是尾数部分,也称为有效数字或小数部分。这样的分配使得float类型能够精确表示大约6到7位十进制有效数字。值得注意的是,尾数位数的增加会提高数值的精度,减少误差;而指数位数的增多则拓宽了数据可表示的范围。
浮点类型的选择与精度问题18double类型占用64位的存储空间,最高位也是符号位,用于区分数值的正负。其指数部分扩展到了11位,提供了更大的指数范围。剩余的52位为尾数部分,用于存储小数部分的详细信息。这一设计使得double类型能够精确到大约15到16位十进制有效数字。虽然double类型在内存占用和处理速度上,相比float有一定劣势,但是在我们学习与应用过程中,可以完全不考虑这方面因素。
浮点类型的选择与精度问题浮点类型精度内存占用指数位尾数位精确度表示范围float型单精度4字节8236-7位10-38-1038double型双精度8字节115215-16位10-307-10308191952年,中国的GDP总量为679.09亿元人民币,人均GDP则为119.37元人民币。为了确保数据的精确性,需要将GDP的数值精确到“分”这一单位。在这种情况下,119.37元人民币可以用float类型存储。对于GDP总量,将其转换为元为单位,即67909000000.00元,虽然这个数值没有超过float类型能表示的最大值1038,但由于其有效数字为13位,超过了float的6到7位精度,因此只能使用double类型来存储。到了2023年,中国的GDP总量增长至1260582亿元人民币,人均GDP也提升至89358元人民币。在处理这些数据时,我们注意到89358.00元人民币具有7位有效数字,因此不宜使用float类型存储,因为float类型只能保证6到7位的有效数字精度,而不能确保7位的精度。为了确保精度,应选择double类型。至于GDP总量,其数值为126058200000000.00元,有效数字达到了17位,已经超出了double类型所能存储的范围。为了解决这一问题,可以考虑将GDP总量转换为以“分”为单位的数值,即乘以100,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年国内交通规划现状调查分析
- 2026年汉堡店抽奖活动策划
- 2026年病理科管理规范及操作常规
- 2026年文化创意营销案例分享
- 2026年人教版高二第二学期英语期末重点高中联考试卷(附答案可下载)
- 京东卖家未开通消保协议书
- 古代诗人名人龚自珍人物介绍课件
- (2026年)医院感染诊断标准院感知识培训
- 2026年人教版高二第二学期数学期末重点高中联考试卷(附答案可下载)
- 2026年人教版高二第二学期生物期末普通基础测评试卷(附答案可下载)
- 危重症患者系统化评估与多维度护理管理实践
- 华润守正评标专家考试题库及答案
- 2026年高校教师资格证之高等教育学考试题库【必刷】
- 《储能材料与器件分析测试技术》课件-项目二 正极材料
- 2025辽宁沈阳副食集团及所属企业招聘2人参考题库及答案解析(夺冠)
- 2026安全生产月安全生产知识竞赛题库及答案
- 2025年(第三届)电力行业智能巡检技术大会:变电室内简易机器人技术探索与实践
- 认识小数(说课课件)三年级下册数学人教版 演示模板
- 六种基本绷带包扎法课件
- 预防接种院感知识培训课件
- 电磁场与电磁波(第6版)课件 第8章 电磁波辐射分析基础
评论
0/150
提交评论