计算机概论和数据表示
1、计算机硬件系统的5大功能部件
1945年,世界上出现了第一台电子数字计算机,取名ENIAC(埃尼阿克),主要用于计算弹道。它体积庞大,占地面积500多平方米,重量约30吨,功耗为170千瓦,这台计算机使用了17840支电子管,其运算速度为每秒5000次的加法运算。其运算速度为每秒5000次的加法运算。
计算机硬件发展历史
代 | 时间 | 硬件技术 | 速度 / (次/秒) |
---|---|---|---|
1 | 1946-1957 | 电子管 | 40 00 |
2 | 1958-1964 | 晶体管 | 200 000 |
3 | 1965-1971 |
中小规模 集成电路 |
1 000 000 |
4 | 1972-1977 |
大规模 集成电路 |
10 000 000 |
5 | 1978-现在 |
超大规模 集成电路 |
100 000 000 |
“计算机之父”-冯·诺依曼
他的精髓贡献是两点:二进制思想与程序内存思想。
著名的“冯·诺依曼机”包括:运算器、逻辑控制装置、存储器、输入和输出设备五大部分,该结构一直沿用到今。
计算机硬件系统
现代计算机结构框图
2、计算机软件分类及编程语言的前世今生
计算机软件分类
二进制思想
- 采用有限个状态(用0和1)来表示、处理、存储和传输数据的技术。
- 计算机中的一切内容都是数字0、1。
从物理世界到计算机世界
众所周知物理中后的 电流
与 电压
。计算机只能识别二进制
,我们规定:
大于某个某个电压的电流就代表你输入了1
小于某个电压你就输入了0
为什么是二进制?
你想想,你把计算机设计成10进制,就需要给给电压
设置10个水准。
一个瓜子是切成两半好控制还是切成10瓣好控制?
编程语言的前世今生
从上面了解到了一个真理:
计算机只能识别二进制
现在幻想是你发明的计算机:
你想实现增值运算
你得用一串二进制代表这个是一个
+
,你决定使用0100 0011
代表+
你想实现增值运算
你得用一串二进制代表这个是一个
-
,你决定使用0100 0010
代表-
你发现这样太费劲了,不如开发一个东西,让他把
add
这个单词转换成0100 0011
吧一门以二进制为底层的变成语言被你创造了。
…
有一天,你连
add
都嫌费劲了,因为需要敲3下键盘。于是乎,你再次创造了一门变成语言将
+
转换成add
。
3、计算机如何执行你的程序
- 把程序和数据装入到主存储器中。
- 从程序的起始地址运行程序。
- CPU的工作非常简单,它从内存中获取一个指令并执行该指令,然后从内存中获取下一个指令并执行。CPU能以惊人的速度来从事枯燥的工作(机器是很辛苦的)。
- 每条指令都要经过取指、译码、执行。
计算机的性能指标
机器字长
进行一次运算所能处理的二进制数据的位数
主存容量
指主存所能存储的最大容量
运算速度
衡量性能的一个重要指标。CPU时钟周期、主频、MIPS(Million Instructions Per Second)等
数据通路带宽
数据总线一次并行传递数据的位数。
4、进制的世界
什么是进制?
N 进制的每一位
最高只能是N-1
,
根据10进制好好想一想阿拉伯数字:九
,再往上,想要表达十
应该如何去书写?
`10进制 | 2进制 | 8进制 | 16进制 |
---|---|---|---|
10 | 1010 | 12 | a |
11 | 1011 | 13 | b |
12 | 1100 | 14 | c |
13 | 1101 | 15 | d |
14 | 1110 | 16 | e |
15 | 1111 | 17 | f |
16 | 10000 | 20 | 10 |
进制间的转换
10 进制
-> N进制
整数部分:除p倒取余
小数部分:乘P正取整
例如26.325转换成二进制
整数部分
计算 | 值 | 余数 |
---|---|---|
26/2=13…0 | 13 | 0 |
13/2=6…1 | 6 | 1 |
6/2=3…0 | 3 | 0 |
3/2=1…1 | 1 | 1 |
1/20…1 | 0 | 1 |
计算完毕。
倒取余为:11010
小数部分
计算 | 整数部分 | 小数部分 |
---|---|---|
0.325*2=0.65 | 0 | 65 |
0.65*2=1.3 | 1 | 3 |
0.3*2=0.6 | 0 | 6 |
0.6 *2=1.2 | 1 | 2 |
0.2*2=0.4 | 0 | 4 |
0.4*2=0.8 | 0 | 8 |
0.8*2=1.6 | 1 | 6 |
计算完毕
(26.325)10 = (11010.0101001)2
关于小数的计算完毕
1、小数部分为0。
2、在数学中,存在无穷的的小数3.1415926……,算不完呀,只能精确到一定位数。
10 进制
-> N进制
N 进制==->==
10进制`
将各位数码和其
权值
相乘后求和,即可转换成十进制.
权值
请细细品位何为权值。
二进制数 | 等价的权值 |
---|---|
1 | 20 |
10 | 21 |
100 | 23 |
1000 | 24 |
例: 10110转换成十进制
进制间的转换
5、非数值数据的编码
如上所述我们已经了解了计算机是如何在二进制世界
中表示数字的。
那各种字符该怎么表示呢?
举个例子。你当下看到的:汉字
、A
,他们肯定是对应着某个2进制
吧?
接下来,了解一下 字符编码 的发展里程把。
ASCII编码
ASCII(American Standard Code for Information Interchange),用7个bit位表达128个符号。
American :美国
美国人发明了计算机,他们发明了一种规则,某个二进制
对应某个字符
这就是ASCII
一开始是 7个 bit为的 ascii 编码,后来他们感觉不够用,又扩展了一些。
扩展的ASCII码
在原有的基础上扩展到8位。
GB2312
ASCII 码只有英文,没办法表示汉字呀,就在此时,我们的中文编码
国标2312
应时而出。
- 《信息交换用汉字编码字符集》是由中国国家标准总局1980年发布,1981年5月1日开始实施的一套国家标准,标准号是GB 2312—1980。
- GB 2312标准共收录6763个汉字,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆**99.75%**的使用频率。
- GB 2312把127号之后的字符取消掉,使用2个大于127的字节连在一起表示1个字符。大约表示了7000多个简体汉字。GB2312是对ASCII的中文扩展。
2个大于127的字节排列组合是远远大于,7000,之所以如此是为了留出空间兼容
ASCII
Unicode
如上两种编码产生一个问题。那就是
乱码
中国有GB2312
,美国有ASCII
、日本有……、韩国有……当计算机网络面向世界的时候,这些都成为了很严重的问题。
unicode 正是为了结束这个三国混战的局面 而出现的。
- Unicode( Universal Multiple-Octet Coded Character Set通用多八位编码字符集),简称UCS。
- Unicode(统一码、万国码、单一码)是一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
- 在很多现代技术中,比如现代操作系统,Java语言等中都采用了Unicode标准规范。
Unicode面临的问题
如何将其与ASCII区别开来?英文字符的冗余问题。
因为unicode需要兼容一切所以他必然要适应哪些文字比较多
的编码。
同样表示一个相同的字符。
不保证下方数值准确性,只为打比方
Unicode | ASCII |
---|---|
0100 0101 0010 0100 0101 0111 | 0000 0000 0000 0000 0100 0001 |
美国人:
前面这么多零是什么意思?
这样岂不是我们所有的数据
都需要浪费这么多的空间去存储一大堆的0
UTF
utf 的出现打破了unicode尴尬的局面
- UTF(Universal Character Set Transformation Format)通用字符集转换格式
- 在UTF中主要有UTF-8,UTF-16和UTF-32。
- UTF-8 每次传输8位数据,UTF-16每次传输16位数据。
- UTF-8是变长字节编码方案,使用1-4个字节表示一个符号。
解释一下
为什么说utf 是的字节长度是可变的呢?
根据上面的图片来看。
utf-8 使用了一种比之 Unicode 来说比较聪明的做法。他可以说是Unicode 的延伸
制定不同的区间
,使用不同的前缀
来节省空间。
比如计算机要解码一串 UTF-8的二进制 :
01010010 11010010 10010010 01010010 11010010 10010010 01010010 11010010 10010010 01010010 11010010 10010010
(我瞎编的)
计算机一次取8位。
``01010010`
一看 0 打头。哦,这是8个字节的字符。01010010
变成字符把
接下来
11010010
一看110打头。哦,这是一个 16个字节的字符。于是乎11010010 10010010
变成字符把
……
例子:
Unicode中一个中文占2个字节,但是在UTF-8中,一个中文字符占3个字节(多出来一些前缀
)。
汉字 | Unicode编码16进制 | Unicode编码2进制 | UTF-8的编码 |
---|---|---|---|
知 |
0077e5 (000800-00FFFF) |
0111 0111 1110 0101 | 1110 0111 1001 1111 1010 0101 |
6、带符号数的表示及运算
无符号数和有符号数
- 采用数字化方式来表示数据,数据有无符号数和带符号数之分,其中带符号数用‘0’表示‘正’号,用‘1’表示‘负’号。运算的时候为了统一处理数字位和符号位,演化出原码、补码和反码****3种表示形式。
- 补码的应用居多,原因是补码可以带符号运算而且可以变减为加。
- [x-y]补=[x]补+[-y]补
定点数
在定点数表示法中约定:所有数据的小数点位置固定不变。
浮点数
小数点的位置根据需要而浮动,这就是浮点数。
例如:
例如:
- r为浮点数阶码的底,与尾数的基数相同,通常r=2。E和M都是带符号数,E叫做阶码,M叫做尾数。
- 为了提高运算的精度,M一般取规格化形式,即规定尾数的最高数位必须为有效值。
溢出概念
溢出是指运算结果超出了数的表示范围。
例如:4个bit位的状态
4bit表示的范围0—15
1111+ 1
10000
精度
- 对于字长相同的定点数和浮点数来说,浮点数虽然扩大了数的表示范围,但是精度降低了。
- 在实际编程中由于精度问题,会导致一些错误。比如:3和1/3的乘积应该是1.0,但是若用6位小数表示1/3,乘积为0.999999而不等于1.0.造成一些逻辑判断错误,或者运算结果精度不够。
- 建议搞清楚程序面对的问题规模,选择合适精度的数据类型。不能一概采用float。
计算机概论和数据表示相关推荐
- 鸟哥的Linux私房菜(基础篇)-第零章、计算机概论(零.3)
第零章.计算机概论 最近更新日期:2009/08/03 3. 数据表示方式 3.1 数字系统 3.2 文字编码系统 数据表示方式 事实上我们的计算机只认识0与1,记录的数据也是只能记录0与1而已,所以 ...
- 鸟叔的linux私房菜:第0章 计算机概论学习笔记(Learning Notes for Basic Computer Theory)
本博客是针对<鸟叔的Linux私房菜 基础学习篇 第四版>的第0章 计算机概论的学习笔记. 1 电脑辅助人脑的好工具 11 计算机硬件的五大单元 12 一切设计的起点CPU的架构 其它单元 ...
- Linux学习:计算机概论
计算机概论 引用:<鸟哥的Linux私房菜基础篇第三版> 计算机:辅助人脑的好工具 现在的人们几乎无时无刻都会碰计算机!不管是桌面计算机(PC).笔记本电脑.平板计算机.智能型手机等等,这 ...
- 现代计算机工作模式是由科学家,计算机概论各章作业.doc
计算机概论各章作业 第一章 1.一个完整的计算机系统应该包括 ______. A)主机.键盘.鼠标和显示器 B)硬件系统和软件系统 C)主机和其他外部设备 D)系统软件和应用软件 2.计算机之 ...
- Linux 第0章 - 计算机概论
Linux 第0章 - 计算机概论 操作系统跟硬件有相当程度的关联性,所以,了解一下计算机概论可能会帮助你更快的了解Linux的概念. 1 电脑:辅助人脑的好工具 计算机:接受用户输入的命令与数据,经 ...
- 鸟哥的Linux私房菜(基础篇)-第零章、计算机概论(零.5)
第零章.计算机概论 最近更新日期:2009/08/03 5. 重点回顾 6. 本章习题 7. 参考数据与延伸阅读 8. 针对本文的建议:http://phorum.vbird.org/viewtopi ...
- 鸟哥的Linux私房菜(基础篇)-第零章、计算机概论(零.4)
第零章.计算机概论 最近更新日期:2009/08/03 4. 软件程序运作 4.1 机器程序与编译程序 4.2 操作系统 4.3 应用程序 软件程序运作 鸟哥在上课时常常会开玩笑的问:『我们知道没有插 ...
- 鸟哥的Linux私房菜(基础篇)-第零章、计算机概论(零.2)
第零章.计算机概论 最近更新日期:2009/08/03 2. 个人计算机架构与周边设备 2.1 CPU:CPU的外频与倍频,32位与64位,CPU等级 2.2 內存 2.3 显卡 2.4 硬盘与储存设 ...
- 鸟哥的Linux私房菜(基础篇)-第零章、计算机概论(零.1)
第零章.计算机概论 最近更新日期:2009/08/03 1. 計算机:辅助人脑的好工具 1.1 計算机硬件的五大单元 1.2 CPU的种类 1.3 周边设备 1.4 运作流程 1.5 計算机分类 1. ...
最新文章
- NMAP输出结果中CPE的含义
- jquery input值改变事件_前端技术--JQuery
- 嵌入式码农的10年Bug调试经验,值得一看
- 用python画一个人_用turtle画个单身狗送给自己~
- Ubuntu环境下,使用clion编译器,使用开源opensll的对称AES算法对于文件进行加密,C++代码
- hihoCoder #1143 : 骨牌覆盖问题·一
- php 日期时间操作-可算出几天后的时间
- 组件注册-@Scope-设置组件作用域
- 让apache支持ssl
- java微信刷卡支付demo_微信刷卡支付例子
- SQL Server 2008 R2 清除日志
- Photoscan空三成果导入到ContextCapture(smart3d)生成倾斜模型教程
- matlab函数文件||脚本文件和函数文件的区别
- Amazon 新手要知道 100 个问题
- Maven Resources Plugin的Filtering功能的Bug
- Codeforces Round #555 (Div. 3), problem: (C2) Increasing Subsequence (hard version)【贪心+撞到南墙也不回头】
- 浙教版数学作业本,参考答案如此下载
- 移植ucos-III到stm32f103c8t6
- PAT A1103 Integer Factorization整数分解 (经典DFS优化)
- python开源库——h5py快速指南