《Write Great Code》Chapt 2 Numberic

又见好书,今天图书馆看了第一卷:Understanding the Machine

这是讲解计算机底层细节的,正是这点上,填充了世面上很多编程书的空缺。

的确,要更清楚的了解这些,一本厚厚的书都可以,推荐《深入理解计算机系统》CMU计算机系主任写的,我看过,很赞

但是当我们伟大社会主义教育开始教我们的时候,有几个人教你为什么那样,只会教你就要这样!

比如,你上大学编程课的时候,有老师告诉你操作系统到底帮你解决了哪些问题,程序和操作系统怎样交互的吗? 你又知道运行时内层如何布局的吗?你又怎样知道运行时库做了些什么?C标准库都是可移植的吗?甚至你知道编译器到底在背后做了什么手脚?你清楚哪些代码是可移植的,哪些代码是机器相关或系统相关的?如果历史倒回,没有操作系统、没有编译器,你怎样让计算机帮你做事?等等等...我们是可悲的,我们知其然,却不知其所以然...老美是幸福的,它们创造了规则,他们游戏其间而恢恢乎有余!

言归正传,让别人去大学学习那些该见鬼去的东西吧,我标榜自己爱穷根刨底,于是我选择了不是处于高级和低级语言之间的语言:C/C++。也许等我哪天真的要求对计算机的控制欲膨胀时,我可能去垂青于assembly。甚至哪天,我干脆就直接用机器码写代码...哈哈,这个有点退步了.但是,还有什么比完全掌控更让人满足的呢?

书籍是人类进步的阶梯,不是吗?

Ranall hyde: 此人甚牛,以下书的作者,他推荐用的assembly: High Level Assembly

 

 

 

<the Art of Assembly>

 http://webster.cs.ucr.edu/AoA/index.html

 

 

 

 

<Write great code>

http://webster.cs.ucr.edu/WriteGreatCode/index.html

 

 

 

第2章 Numeric Representation

2.1 什么是数?

数:number

one of a series of symbols of unique meaning in a fixed order that can be derived by counting.

数字: digit

Such a symbol used in a system of numeration.

  • 数的表示通常是一些符号序列
  • 数的表示方式并不唯一

 

2.2 计数系统

  • 位值法(positional notation system): 表示紧凑,容易辨认
  • 非位值法(non-positioanal notation system):对实物计数比较方便,但是此表示占用空间与数值成正比

常见的非位值计数法:

tally-slash:

25: Tally-slash

中国选举投票的“正”字法:

13:  zheng

下面介绍我们常用的位值计数系统:

2.2.1 十进制

2.2.2 进制(基数)

2.2.3  二进制

二进制转十进制:

110010102 :

1x107+1x106+0x105+0x104+1x103+0x102+1x101+0x100

20210

十进制转二进制:

不停作除法,商是偶数插入0,商是奇数插入1

8410

2to10   10101002

2.2.4 十六进制计数

优点:比二进制紧凑,而且与二进制转换非常方便

十六进制和二进制转换方法是按4bit分组

八进制和二进制转换方法是按3bit分组

2.3 数与字符串的表示

考虑下列问题:

通常我们需要一个整数,用户从控制台输入的是一个字符串,那么整型变量如何得到数的呢?

原来运行时库(run-time library)负责将字符转换为CPU需要的内部二进制形式

你需要清楚这种转换是需要代价的,具体的转换算法这里不讨论

下面任何一个都涉及到字符串与数字的转换:

printf("%d", i); //C

cout << i; //C++

2.4 数的内部表示

2.4.1 位bit

2.4.2 位串 bit string

半字节nibble: 4 bits

字节byte: 8 bits

字word:依赖于CPU, 80X86的机器字为16 bits

双字dword: 80x86 CPU为32 bits

长字long word: 80x86 CPU为64 bits

tbyte: 10字节,用来存储扩展精度浮点数,以及BCD数

bitstring

posted @ 2007-10-31 14:50  中土  阅读(770)  评论(1编辑  收藏  举报
©2005-2008 Suprasoft Inc., All right reserved.