1、C++编程概述

文章目录

  • 一、基本概念
  • 二、数据的表示及运算
    • 计算机中数据表示
    • 进制间相互转化
    • 二进制计算规则
  • 三、计算机数据的存储单位
  • 四、机器数和码制
  • 五、机器数运算
    • 机器数的加减运算
    • 机器数的乘除运算

面向对象编程语言把事物看成是具有属性和行为的对象,然后通过抽象找出属于同一类的事物的属性和行为,就形成了类。通过类得继承和多态可以很好的实现代码复用,提高软件开发效率。
结构化程序设计方法,它的设计思路是,自上而下,逐步细化,将程序结构按功能分成多个模块,每个模块可能又会分成多个模块,这样就形成了一个模块的树状结构,各个模块间的关系尽可能简单,功能上相对独立。每个模块都是由顺序、选择和循环三种基本结构组成。这种方法就将一个复杂的程序设计问题分成很多简单细化的子问题,更便于开发维护。但是这种方法的缺点是数据和处理数据的方法各自独立,如果数据结构改变,所有相关的方法都要改变。
面对对象设计方法,它将数据和方法放到一个整体里,这个整体就叫对象,同类型对象抽象成类,类中大部分数据只能用本类中的方法处理,类通过简单的外部接口与外界发生关系,而内部的各种关系对外部是透明的。

一、基本概念

  1. 对象
    每个对象都是描述客观存在事物的一个实体,都是由数据和方法(也可以叫属性和行为)构成。属性是描述事物特征的数据,行为描述对对象属性的一些操作。

  2. 类是具有相同属性和行为的一些对象的集合,它为所有属于这个类的对象提供抽象的描述,比如麻雀和杜鹃都可以看作是对象,而鸟就可以看作类。
  3. 封装
    封装就是把对象的所有属性和行为结合成一个独立的单位,对外隐藏对象的内部细节,只保留有几个接口与外界联系。
  4. 继承
    一个类(叫做子类)可以通过继承另一个类(叫做父类)来拥有另一个类的所有属性和行为。比如车和汽车,汽车从车继承,车的所有属性和行为都继承到了汽车上。
  5. 多态性
    多态性就是说父类中的属性和行为被子类继承后,子类可以有自己不同于父类的属性或行为。比如定义一个类“动物”,它具有“吃”这个行为,但是具体怎么吃吃什么,不知道,因为不知道到底是个什么“动物”,如果从这个类继承出子类“羊”和“老虎”,“吃”就成了具体的行为,怎么吃吃什么就都知道了。

二、数据的表示及运算

计算机中数据表示

计算机内部,数值、文字、声音、图形图像等各种信息都必须经过数字化编码后才能被传送、存储和处理。编码就是采用少量的基本符号,选用一定的组合原则,来表示大量复杂多样的信息,
常用计数制

进制间相互转化

  1. 十进制与二进制相互转化
    将十进制转换魏二进制时,整数部分和小数部分分别转换,然后合并。十进制整数转换为二进制整数的方法是“除2取余”,先出低位最后得高位;十进制小数转换为二进制小数的方法是“乘2取整”,先得高位再得低位。
    如: 175.7187 5 10 175.71875_{10} 175.7187510转换为二进制为 10101111.1011 1 2 10101111.10111_2 10101111.101112
    在熟悉2的整数幂次情况下,可将十进制数写成按二进制数权的大小展开的多项式,按权值从高到低依次取各项的系数就可得到相应的二进制数。
    175.7187 5 10 = 2 7 + 2 7 + 2 5 + 2 3 + 2 2 + 2 1 + 2 0 + 2 − 1 + 2 − 3 + 2 − 4 = 10101111.1011 1 2 175.71875_{10}=2^7+ 2^7+2^5+2^3+2^2+2^1+2^0+2^{-1}+2^{-3}+2^{-4}=10101111.10111_2 175.7187510=27+27+25+23+22+21+20+21+23+24=10101111.101112
    二进制转换为十进制的方法:将二进制数的每一位数乘以它的权,然后相加,即可得到相对应的十进制。
  2. 八进制计数法与十进制、二进制计数法的相互转换
    十进制转八进制:对于十进制整数部分采用“除8取余”的方法转换为八进制整数;对于十进制小数则采用“乘8取整”的方法转换为八进制小数。
    二进制数据转换成八进制数的方法是:从小数点起,每三位二进制位分成一组(不足3位时,在小数点左边时左边补0,在小数点右边时右边补0),然后写出每一组的等值八进制数。顺序排列起来就得到所要求的八进制数。
    八进制转二进制:将一位8进制用三位二进制数表示,就可以直接将八进制数转换成二进制。
    二进制、八进制和hi十六进制之间的对应关系
  3. 十六进制计数法与十进制、二进制计数法的相互转换
    十进制转十六进制:十进制数的整数部分“除16取余”,十进制数的小数部分“乘16取整”。
    二进制转十六进制:4位二进制对应1位16进制。
    10101111.1011 1 2 = A F . B 8 16 10101111.10111_2=AF.B8_{16} 10101111.101112=AF.B816

二进制计算规则

  • 加法:二进制加法的进位规则是“逢二进一”
  • 减法:二进制减法的借位规则是“借一当二”
  • 乘法
    0 × 0 = 0 0\times0=0 0×0=0 1 × 0 = 0 1\times0=0 1×0=0 0 × 1 = 0 0\times1=0 0×1=0 1 × 1 = 1 1\times1=1 1×1=1

三、计算机数据的存储单位


  1. 这是数据的最小单位,表示一位二进制数据。
  2. 字节
    由八位二进制数据组成。字节是数据存储中最常用的基本单位。我们常说内存有2G,这里的单位就是字节。1K等于1024字节,1M等于1024K,1G等于1024M。

  3. 位的组合,作为一个独立的信息单位处理。取决于机器的类型、字长及使用者的要求。常用的固定字长有8位、16位、32位等。
  4. 机器字长
    讨论信息单位时,有个与机器硬件指标有关的单位就是机器字长,一般指参加运算的寄存器所含有的二进制数的位数,它代表了机器的精度,如32位、64位等。就是我们常说的32位机器还是64位机器。

四、机器数和码制

对于带符号数,机器数的最高位是表示正、负的符号位,其余则表示数值。若约定小数点的位置在机器数的最低数值位之后,则是纯整数;若小数点的位置在机器数的最高数值位之前(符号位之后),则是纯小数。无符号数是指全部二进制位均代表数值,没有符号位。
带符号的机器数可以采用原码、反码和补码、移码等不同得编码方式。

  1. 原码表示
    数值X得原码记为 [ X ] 原 [X]_原 [X]如果机器字长为n,则最高位是符号位,0表示正好,1表示负号,其余的n-1位表示数值的绝对值。数值零的原码表示有两种形式: [ + 0 ] 原 = 00000000 , [ − 0 ] 原 = 10000000 [+0]_原=00000000,[-0]_原=10000000 [+0]=00000000[0]=10000000
  2. 反码表示
    数值X的反码记为 [ X ] 反 [X]_反 [X]如果机器字长为n,则最高位是符号位,0表示正好,1表示负号,其余的n-1位表示数值。
    正数的反码与原码相同,负数的反码则是其绝对值按位求反。
    数值零的反码表示有两种形式: [ + 0 ] 反 = 00000000 , [ − 0 ] 反 = 11111111 [+0]_反=00000000,[-0]_反=11111111 [+0]=00000000[0]=11111111
  3. 补码表示
    数值X的补码记为 [ X ] 补 [X]_补 [X]如果机器字长为n,则最高位是符号位,0表示正好,1表示负号,其余的n-1位表示数值。
    正数的补码与其反码和原码相同,负数的补码则等于其反码的末尾加1。
    在补码表示中,0有唯一的编码: [ + 0 ] 补 = 00000000 , [ − 0 ] 补 = 00000000 [+0]_补=00000000,[-0]_补=00000000 [+0]=00000000[0]=00000000
    相对于原码和反码表示,n位补码表示法有一个例外,当符号位为1而数值位全部为0时,它表示整数 2 n − 1 2^{n-1} 2n1,即此时符号位的1即表示负数又表示数值。
  4. 移码表示
    移码表示法是在数X上增加一个偏移量来定义的,常用于表示浮点数中的阶码。是基于补码来进行计算。
    如果机器字长为n,在偏移量为2^(n-1)时,只要将补码的符号位取反即可获得相应的移码表示。

五、机器数运算

机器数的加减运算

在计算机中,可以只设置加法器,而将减法器运算转换为加法运算来实现。

  1. 原码加减法
    先确定符号位,符号位相同则加数值为进行运算;符号位不同则比较数值位绝对值,取绝对值大的符号位,然后用绝对值大的减去绝对值小的。
    在计算机中很少使用原码计算。
  2. 补码加减法
    补码加法: [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 [X+Y]_补=[X]_补+[Y]_补 [X+Y]=[X]+[Y]
    补码的减法:差的补码等于被减数的补码加上减数取负后的补码,即: [ X − Y ] 补 = [ X ] 补 + [ − Y ] 补 [X-Y]_补=[X]_补+[-Y]_补 [XY]=[X]+[Y]
    由[X]_补求[-X]_补的方法是:[X]_补的各位取反(包括符号位),末尾加1。

补码加减运算的规则如下:

  • 参加运算的操作数用补码表示。
  • 符号位参加运算。
  • 若进行相加运算,则两个数的补码直接相加;若进行相减运算,则将减数连同其符号位一起变反后加1后于被减数相加。
  • 运算结果用补码表示。

机器数的乘除运算

  1. 纯软件方案。
  2. 在现有的能够完成加减运算的算数逻辑单元ALU的基础上,通过增加少量的实现左、右移动的逻辑电路,来实现乘除运算。
  3. 设置专门的硬件阵列乘法器(或除法器),完成乘(除)法运算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/661594.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

命令行解析器浅解

1、什么叫解析器? 解析器(parser)是一种程序或组件,用于分析输入的数据,并将其转换为更易于处理的格式。解析器在计算机科学中有广泛的应用,特别是在编译器、解释器、自然语言处理和数据格式转换等领域。 1…

计算机网络学习笔记——运输层(b站)

目录 一、 运输层概述 二、运输层端口号、复用与分用的概念 三、UDP和TCP的对比 四、TCP的流量控制 五、TCP的拥塞控制 六、TCP超时重传时间的选择 七、TCP可靠传输的实现 八、TCP报文段的首部格式 一、 运输层概述 物理层、数据链路层、网络层实现了主机到主机的通信…

存储器和CPU的连接与TCP的流量控制

存储器与CPU的连接 存储容量的拓展 (1)位拓展:增加存储字长 (2)字拓展 增加存储器字的数量 例题:设CPU有16根地址线,8根数据线,并用MREQ作为访问存储控制信号(低电平有效),WR作为…

错误记录:从把项目从Tomcat8.5.37转到Tomcat10.1.7

错误信息:在本地Servlet项目里没有报错,但是浏览器跳转该servlet时报错 型 异常报告 消息 实例化Servlet类[com.wangdao.lx.MyServlet1]异常 描述 服务器遇到一个意外的情况,阻止它完成请求。 例外情况 jakarta.servlet.ServletExceptio…

debian11安装留档@VirtualBox

因为debian12无法安装tpot,所以又把11重新安装一遍,以前的安装文档:安装Debian 11 留档-CSDN博客 下载光盘 华为云地址:https://repo.huaweicloud.com/debian-cd/11.0.0/amd64/iso-cd/ 使用了debian11 教育版,比较有…

Spring Cache自定义缓存key和过期时间

一、自定义全局缓存key和双冒号替换 使用 Redis的客户端 Spring Cache时,会发现生成 key中会多出一个冒号,而且有一个空节点的存在。 查看源码可知,这是因为 Spring Cache默认生成key的策略就是通过两个冒号来拼接。 同时 Spring Cache缓存…

【开源三方库】Aki:一行代码极简体验JSC++跨语言交互

一、简介 OpenAtom OpenHarmony(以下简称“OpenHarmony”)的前端开发语言是ArkTS,在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是JavaScript(简称JS&#xf…

大模型时代的具身智能系列专题(五)

stanford宋舒然团队 宋舒然是斯坦福大学的助理教授。在此之前,他曾是哥伦比亚大学的助理教授,是Columbia Artificial Intelligence and Robotics Lab的负责人。他的研究聚焦于计算机视觉和机器人技术。本科毕业于香港科技大学。 主题相关作品 diffusio…

MySQL之创建高性能的索引(六)

创建高性能的索引 选择合适的索引列顺序 当使用前缀索引的时候,在某些条件值的基数比正常值高的时候,问题就来了。例如,在某些应用程序中,对于没有登录的用户,都将其用户名记录为"guest",在记录…

OpenMV学习笔记2——颜色识别

目录 一、打开单颜色识别实例代码 二、代码基础部分 三、阈值选择 四、给识别到的颜色画框 五、多颜色识别 一、打开单颜色识别实例代码 如图,双击打开对应文件即可进入实例代码。 二、代码基础部分 # Single Color RGB565 Blob Tracking Example # # This e…

MindSpore实践图神经网络之环境篇

MindSpore在Windows11系统下的环境配置。 MindSpore环境配置大概分为三步:(1)安装Python环境,(2)安装MindSpore,(3)验证是否成功 如果是GPU环境还需安装CUDA等环境&…

浅谈 parallelStream和Stream 源码及其应用场景

上篇讲述了list.forEach()和list.stream().forEach() 异同点 谈到了并行流的概念&#xff0c;本篇则从源码出发&#xff0c;了解一下其原理。 一、流的初始操作流程 jdk8中 将Collection中加入了转换流的概念。 default Stream<E> stream() {return StreamSupport.str…

Verilog HDL基础知识(一)

引言&#xff1a;本文我们介绍Verilog HDL的基础知识&#xff0c;重点对Verilog HDL的基本语法及其应用要点进行介绍。 1. Verilog HDL概述 什么是Verilog&#xff1f;Verilog是IEEE标准的硬件描述语言&#xff0c;一种基于文本的语言&#xff0c;用于描述最终将在硬件中实现…

2024 angstromCTF re 部分wp

Guess the Flag 附件拖入ida 比较简单&#xff0c;就一个异或 switcher 附件拖入ida 明文flag Polyomino 附件拖入ida 需要输入九个数&#xff0c;然后进入处理和判断&#xff0c;如果满足条件则进入输出flag部分&#xff0c;flag和输入有关&#xff0c;所以要理解需要满足什么…

202474读书笔记|《我自我的田渠归来》——愿你拥有向上的力量,一切的好事都应该有权利发生

202474读书笔记|《我自我的田渠归来》——愿你拥有向上的力量 《我自我的田渠归来》作者张晓风&#xff0c;被称为华语散文温柔的一支笔&#xff0c;她的短文很有味道&#xff0c;角度奇特&#xff0c;温柔慈悲而敏锐。 很幸运遇到了这本书&#xff0c;以她的感受重新认识一些事…

ChatGPT的基本原理是什么?又该如何提高其准确性?

在深入探索如何提升ChatGPT的准确性之前&#xff0c;让我们先来了解一下它的工作原理吧。ChatGPT是一种基于深度学习的自然语言生成模型&#xff0c;它通过预训练和微调两个关键步骤来学习和理解自然语言。 在预训练阶段&#xff0c;ChatGPT会接触到大规模的文本数据集&#x…

转发和重定向

目录 是什么 转发&#xff08;Forwarding&#xff09; 概念 特点 实现方式 重定向&#xff08;Redirecting&#xff09; 概念 特点 实现方式 转发和重定向区别整理 转发和重定向的适用场景 转发&#xff08;Forwarding&#xff09; 重定向&#xff08;Redirect&am…

反转!Greenplum 还在,快去 Fork 源码

↑ 关注“少安事务所”公众号&#xff0c;欢迎⭐收藏&#xff0c;不错过精彩内容~ 今早被一条消息刷爆群聊&#xff0c;看到知名开源数仓 Greenplum 的源码仓“删库跑路”了。 要知道 GP 新东家 Broadcom 前几日才刚刚免费开放了 VMware Workstation PRO 17 和 VMware Fusion P…

【本地运行chatgpt-web】启动前端项目和service服务端项目,也是使用nodejs进行开发的。两个都运行成功才可以使用!

1&#xff0c;启动web界面 https://github.com/Chanzhaoyu/chatgpt-web#node https://nodejs.org/en/download/package-manager # 使用nvm 安装最新的 20 版本。 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source /root/.bashrc n…

stm32学习-CubeIDE使用技巧

1.hex文件生成 右键工程 2.仿真调试 3.常用快捷键 作用快捷键代码提示alt/代码注释/反注释ctrl/ 4.项目复制 复制项目&#xff0c;将ioc文件名改为项目名即可图形化编辑