第一章 C语言程序设计预备知识

1、C语言程序设计预备知识

计算机组成概述

进制转换

机器数的表示

1、计算机组成概述

1、现在所使用的计算机硬件系统的结构一直沿用美籍著名数学家 冯·诺依曼提出的模型,运算器、控制器、存储器、输入设备和输出设备 五大功能部件组成。

2、工作原理

image-20220613170913508

注意:上图所示信息流动方向:指令总是送到控制器,而数据总是送到运算器。存储器就是一种能根据地址 接收或提供指令、数据的装置。

3、五大功能部件

  • 运算器(ALU)又称算术逻辑部件,数据运算包括:算术运算逻辑运算

  • 控制器 通过地址访问存储器。一般把运算器和控制器集成在一块电路芯片上,称为中央处理器(CPU)。

  • 存储器 具有记忆功能的部件,用来存放程序数据

    内存储器简称内存,又称主存,是CPU能根据地址线直接寻址的存储空间。内存中存放数据是以相应的内存单元进行存放的,内存单元大小可以是1字节(Byte,B),也可以是多字节。

    外存储器简称外存,又称辅存,外存实际上属于输入/输出设备。

  • 输入设备

  • 输出设备

计算机的工作原理可以简单地概况为:各种各样的信息,通过输入设备,进入计算机的存储器,然后送到运算器,预算完毕后把结果送到存储器存储,最后通过输出设备显示出来。整个过程由控制器进行控制。

5、软件是指计算机 程序及有关程序的技术文档资料。两者中程序更重要,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。

  • 系统软件:系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。这类软件一般与具体应用无关,是在系统以及上提供的服务。系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等;另一类是面向用户的软件,如各种语言处理程序(如VC、CodeBlocks)、实用程序、字处理程序等。(语言编译程序若按软件分类则属于系统软件!!!)
  • 应用软件:应用软件是指某特定领域中的某种具体应用,供最终用户使用的软件,它必须在操作系统的基础上运行,如财务报表软件、数据库应用软件等。

6、软件与硬件的关系

​ 硬件和软件是一个完整的计算机系统中互相依存的两大部分。

  • 硬件和软件互相依存。
  • 硬件和软件无严格界线。
  • 硬件和软件协调发展。

2、进制转换

1、八进制在C语言中会在数的前面加数字 0;十六进制则加 0X。(记住,是数字0,不是字母o

2、十进制转二进制(整数部分和小数部分)(基数除法和基数乘法)

  • image-20220613171617106
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5w3A4x8G-1655128487364)(https://cdn.jsdelivr.net/gh/2339539741/tuchuang/img/202206132154173.png)]

3、机器数的表示(难)

1、真值和机器数

一般地,直接用正号“+”和负号“-”来表示符号的二进制数,称为符号数的真值

计算机中的数用二进制表示,数的符号也用二进制表示。

把一个数连同其符号在内在机器中的表示加以数值化,这样的数称为机器数

2、原码、反码、补码

(原码和反码的表示都有两个1,而补码的表示唯一!)

​ 在算它们的负数表示范围时,可以用 的概念。

​ 这里的m和n均包含一位符号位。

整数:

原码[N]=N [ 0 ~ 2^(n-1))
[N]=2^(n-1) - N ( -2^(n-1) ~ 0]
反码[N]=N [ 0 ~ 2^(n-1))
[N]=(2^n - 1)+ N ( -2^(n-1) ~ 0]
补码[N]=N [ 0 ~ 2^(n-1))
[N]=2^n + N [-2^(n-1) ~ 0)

1、原码如果没有符号位,即可 2^n - 1 个最大,但是少了一个,就只能小于 **2^(n-1)。**1000=0=0000

​ 且 如果为负数,即 该数的绝对值 加上符号位 -01010一共六位,按照等式:100000 + 01010 = 101010

2、反码的正数就不说了;负数就是 模 + 负数的真值,如 -01010的反码为 111111 + (-01010) = 110101 ,看上去其实就 是符号位取 1 ,其余的取反

3、补码的正数同原码;负数的话就是从反码的操作 加 1。

**很重要的发现:**负数的反码和补码都可以简单的从它的原码得出来!!! 正推不行就用这个验算。

小数:(小数和整数的区别在于小数第一位就是2^-1;而整数的第一位为 2^0

原码[N]=N [0 ~ 1)
-(1-2^(-(m-1))) ~ (1-2^(-(m-1)))[N]=1 - N (-1 ~ 0]
反码[N]=N [0 ~ 1)
-(1-2^(-(m-1))) ~ (1-2^(-(m-1)))[N]=2 - 2^(-m) + N (-1 ~ 0]
补码[N]=N [0 ~ 1)
-1 ~ (1-2^(-(m-1)))[N]=2 + N [-1 ~ 0)

原码:m-1就是第m-1位;负数的话直接用 1减去2^(-(m-1))。

反码:那里减 2^(-m) 是为了让 运算的那些位都为 1 ,而结果中 2^(-m)这个位是要舍掉的。

补码:补码的话看看反码吧。

**总结:**理解这个可以从原码的基础上取理解,不管是整数、小数 或者 正数、负数,按照整数的原码反码补码一 致;负数的反码为原码符号位不变,其他位按位取反,负数的补码直接从反码+1。

这种东西还是多记记吧,算的话直接用公式,范围还是得记一下。

参考:

​ 如果计算机内部采用原码来表示数,那么在进行加法和减法运算的时候,需要转化为两个绝对值的加法和减法运算;

计算机既要实现加法器,又要实现减法器,代价有点大。

​ 很容易想到的就是化减为加,举一个生活中的例子来说明这个问题:

​ 时钟一圈是360度,当然也存在365度,但其实它和5度是一样的;相同的道理,-30度表示逆时针旋转30度,其与顺时针旋转330度是一样的;这里数字360表示时钟的一圈,在计算机里类似的概念叫,它可以实现化减为加,本质上是将溢出的部分舍去而不改变结果。

易得,单字节(8位)运算的模为256=2^8。

负数的补码为模减去该数的绝对值

3、补码的加减运算公式

[N1+N2]的补码 = [N1]的补码+[N2]的补码

[N1-N2]的补码 = [N1]的补码+[-N2]的补码

这里的N1、 N2其实就是真值表示的。

如N1=+10011 N2=-01010

[N1+N2]的补码 = [N1]的补码+[N2]的补码 = 010011 +110110

从这里可以看出,这种操作是真的烦人,明明很简单,直接 +10011 + -01010 = +01001,不就可以得出补码了吗。。。

4、二进制的位运算

与(&)、或(|)、非(~)、异或(^) ,这些符号是在C语言中的表示方法。

4、简答题

1、冯诺依曼计算机模型组成部分?各部分主要功能?

2、简述计算机工作原理。

3、计算机软件系统分为哪几类?

4、什么是软件?软件和硬件之间的关系。

5、什么是机器数?为什么计算机用补码表示一个数?

​ 因为补码运算可以连同符号位一起参加运算,这便于运算器的设计和实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值