二进制里的「逢二进一」是什么意思

来源:互联网 发布:mac wav 转 mp3 编辑:程序博客网 时间:2024/06/10 07:12

这个回答里包括如下内容,逐步更新。

  1. 什么是二进制、为什么有二进制、二进制与十进制是什么关系,如何转换。
    1. 数是无穷多的,但是我们只有有限多个符号。因此我们需要使用有限多的符号来表示无限多的数。在这种表示的过程中,产生了进制。
    2. 这段比较罗嗦,可以略过。
      我们常用的是十进制,使用0、1、2、3、4、5、6、7、8、9这十个符号来表示数字,当十个符号不够用的时候,我们就再多使用一个符号,来表示「这里还有一位」的意思。
      例如,当数到9的时候再加就没有符号可以用了。这个时候我们先在左边写上1,变成「1_」,说明有1个完整的「循环」,然后再说「除了完整循环之外,还有多少个数字」,在这里是0,因此整个数字表示为「10」,表示了「比9个还要再多1个」
    3. 这里讲二进制。
      上面讲了当我们有十个符号的时候,如何表示数字。但是当我们有只有二个符号的时候,实际上也可以表示数字。这里取「0」、「1」两个符号。由于只有两个符号,因此这种表示法称为「二进制」。
      于是,最小的那个非负整数,就用0表示,比0大1的,就用1表示,再大1的时候,由于没有符号可用了,只好采取上面十进制的办法,先在左边写上1,变成「1_」,然后再看「除了完整循环之外,还有多少个数字」,这里是0,于是就变成了「10」。但在这个时候,对于十进制来说,之要用「2」这个符号就可以了。也就是说十进制的「2」所表示的数字和二进制的「10」是相同的。
    4. 这里讲二进制与十进制为什么可以转换。
      读到这里,应当能明白,首先有了「抽象意义的数」,然后需要将这个数字表示出来,但是可用的符号又是有限的,因此,在符号有限的约束上,产生了「进制」。十进制就是说用十个符号来表示,二进制就是说用两个符号,十六进制就是说用十六个符号。
      对于同一个「抽象意义的数」来说,用不同进制的表示可能是不同的,但是不同进制表示了同一个「抽象意义的数」,因此是可以转换的。
    5. 十进制转换为二进制
      实际上,高进制向低进制转换,是在数「完整循环」。最简单的转换方式就是做除法求余数,然后把余数按规则排列,就可以得到低进制的表示了。教材上有更多方法,不再赘述。
      例如,十进制数1000(后面用【数字[进制]】这个格式来表示数字,例如十进制数1000表示为【1000[10]】),表示为二进制的1111101000(【111101000[2]】)。
    6. 二进制转换为十进制
      低进制向高进制转换是在「消除循环」,转换为十进制的时候,只要数出一共有多少循环就可以了。教材上使用幂级数列求和的办法已经很好,不再赘述。
      例如【111101000[2]】=0*2^0 + 0 *2^1 + 0*2^2 + 1*2^3+0*2^4+1*2^5 + 1*2^6 + 1*2^7+ 1*2^8 + 1*2^9 = 0 + 0 + 0 + 8 + 0 + 32 + 64 + 128 + 256 + 512 = 【1000[10]】。
    7. 二进制与十六进制
      由于16是2的倍数,因此这两种进制转换的时候有很多简化办法,例如一个十六进制的「位」可以恰好拆成4个二进制的「位」,于是在任意位置的十六进制数,都恰好对应4个二进制数的组合,例如【B[16]】就精确对应【1011[2]】,无论【B[16]】出现在十六进制的哪一位,都精确对应了这个二进制。比如【BA[16]】=【10111010[2]】、【5B[16]】=【01011011[2]】。
      这种良好的对应关系,也是计算机多用十六进制表示数据的一个原因(实际上,八进制也有一样的优势,不过由于其进制数小于十进制的进制数,所以使用没有十六进制广泛,八进制典型的使用就是类unix系统的权限(对的,777权限是八进制))。
    8. 十六进制与十进制
      具体的转换法略过。
      使用二进制作为中介进制,可以快速、简单、高效的完成十六进制与十进制的转换。
  2. 什么是算法,算法包括哪些内容,为什么这个问题与算法无关(或关联性不大)
  3. 什么是汇编,Win32汇编与汇编有什么异同,为什么这个问题与汇编、Win32汇编无关(或关联性不大)
  4. 什么是编程语言,编程语言主要关注哪些方面,为什么这个问题与编程语言无关(或关联性不大)
  5. 应用数学包含哪些东西,为什么这个问题与应用数学无关(或关联性不大)

http://luju.me

原创粉丝点击