美文网首页
程序员的数学基础课

程序员的数学基础课

作者: 孤鹰苍穹 | 来源:发表于2019-03-01 15:24 被阅读0次

参考:程序员的数学基础课

第一章:二进制


1、什么是二进制计数法?

理解二进制之前,先理解十进制。十进制的基数是10,例如:2871 = 210^3 + 810^2 + 710^1 + 1100,可以看到十进制的数位全部都是10n的形式。

明白了十进制,同理二进制的基数就是2,二进制的数位就是2^n的形式,例如110101为二进制,表示为十进制:

image

按照这个思路,我们可以推导出八进制、十六进制等。

基于此,我们来看看二进制、十进制、八进制和十六进制在python中是如何互相转换的,并验证我们之前的推断。

image

2、二进制的位操作

常见的二进制位操作包括向左移位和向右移位操作,以及“或” “与” “异或” 的逻辑操作。下面我们一一来看。

向左移位

二进制 110101 向左移一位,就是在末尾添加一位 0,因此 110101 就变成了 1101010。请注意,这里讨论的是数字没有溢出的情况。

所谓数字溢出,就是二进制数的位数超过了系统所指定的位数,目前主流的系统都支持至少32位的整型数字。如果进行左移操作的二进制已经超出了32位,左移后数字就会溢出,需要将溢出的位数去除。

image

在这个例子中,如果将1101010换算为十进制,int(0b1101010),就是106,正好是53的二倍。 所以,我们可以得出一个结论:二进制左移一位,其实就是将数字翻倍。

向右移位

二进制 110101 向右移一位,就是去除末尾的那一位,因此110101就变成了11010。我们将11010换算为十进制,int(0b11010) 等于 26。正好是53除以2的整数商,所以二进制右移一位,就是将数字除以2的整数商

image

接下来我们看看代码中如何进行移位操作:

image

对10进行左移2位,5进行右移2位,结果:

image

位的“或”

num1 = 0b110101
num2 = 0b100011
print(bin(num1 | num2))
//  output:  0b110111

位的“与”

num1 = 0b110101
num2 = 0b100011
print(bin(num1 & num2))
//  output:  0b100001

位的“异或”

异或
num1 = 0b110101
num2 = 0b100011
print(bin(num1 ^ num2))
//  output:  0b10110

总结

  1. 什么是二进制?
    十进制使用 10 作为基数,x 进制使用 x 作为基数, x 进制的数位>就是 x^n 的形式
  2. 计算机为什么使用二进制?
    二进制的数据表达具有抗干扰能力强、可靠性高的优点;二进制非常适>合逻辑运算
  3. 二进制的位操作
    \underline{移位操作:}
    二进制左移一位,就是将数字翻倍。二进制右移一位,就是将数字除以2并求整数商。
    \underline{逻辑操作:}
    • 或:参与操作的位中,只要有一个是1,最终结果就是1
    • 与:参与操作的位中,必须全都是1,最终结果才是1
    • 异或:参与操作的位相同,最终结果就为0,否则为1

第二章:余数

  1. 余数的特性:整数是没有边界的,它可能是正无穷,也可能是负无穷。余数却总是在一个固定的范围内。生活中,余数可以用来算星期,web编程中可以用在分页中
  2. 同余定理:两个整数 ab,如果它们除以正整数 m 得到的余数相等,我们就可以说 ab 对于模 m 同余
  3. 哈希(Hash):每个编程语言都有对应的哈希函数。哈希有的时候也被翻译为散列,简单来说就是将任意长度的输入,通过哈希算法压缩为某一固定长度的输入

第三章:迭代法

......

相关文章

  • 程序员的数学笔记1--进制转换

    最近在学习极客时间的课程--程序员的数学基础课。 课程地址:https://time.geekbang.org/c...

  • 程序员的数学基础课

    计算机的源头 日常生活中,我们广泛采用十进制计数法。10是十进制计数法的基数,这也是十进制中“十”的由来。 十进制...

  • 程序员的数学基础课

    参考:程序员的数学基础课 第一章:二进制 1、什么是二进制计数法? 理解二进制之前,先理解十进制。十进制的基数是1...

  • 算法和数据结构 - 开篇

    材料 《数据结构与算法之美》 - 极客时间 《程序员的数学基础课》- 极客时间 《算法导论》 方式 多遍实现,达到...

  • 极客时间课程海报

    程序员的数学基础课 数据分析实战 面试现场 重学前端 go语言核心 左耳朵耗子 如何设计一个秒杀系统 推荐系统 l...

  • 动态规划-如何推导出状态转移方程?

    今天学习了《程序员的数据基础课》中的动态规划小节。如果你觉得这个课程对你有启发,请通过 分享一个IT专属的数学课,...

  • 程序员的数学基础课学习记录

    1、怎么学 不要纠结数字计算,把握数学的工具属性,用数学的理论和抽象思想去解决问题,多思考不同问题是否可以用同一个...

  • 《程序员的数学基础课-程序员应该怎么学数学》学习笔记

    导读:程序员应该怎么学数学? 说一下自己之前是怎么学数学的,买了本讲数学历史的书籍,按数学里各种概念出现的时间顺序...

  • 程序员的数学基础课(一)开篇&导读

    开篇词 | 作为程序员,为什么你应该学好数学? 总结笔记: 1. 往大了说,数学它其实是一种思维模式,考验的是一个...

  • 程序员的概率基础课

    前言 本篇内容主要来自极客时间里的《程序员的数学基础课》,本来去年就买的课一直懒得看,赶上这次疫情才老老实实翻出来...

网友评论

      本文标题:程序员的数学基础课

      本文链接:https://www.haomeiwen.com/subject/tusduqtx.html