Skip to content

Latest commit

 

History

History
283 lines (200 loc) · 6.18 KB

020-814923-二进制_binary_bin函数.sy.md

File metadata and controls

283 lines (200 loc) · 6.18 KB
show version enable_checker
step
1.0
true

二进制(binary)

回忆上次内容

  • 数制可以转化
    • bin(n)可以把数字转化为
      • 2进制字符串形态
      • 意思来源于 binary

图片描述

  • 要特别注意
    • type
      • 类型

图片描述

  • bin函数
    • 报了TypeError
  • bin函数要求的 参数
    • 是什么类型(type)来着?

bin函数

  • 再查 bin函数的 帮助手册
    • help(bin)

图片描述

  • bin函数的参数 要求是
    • 是 整数(integer)
    • 而不是 字符串(string)
      • 不能有双引号

再看看 报错

  • 要的是

    • 整数(int)
  • 给的是

    • 字符串(str)

图片描述

  • 字符串(str)
    • 能 被解释为整数(int)
      • 所以TypeError了
  • 其他函数
    • 有 类型的限制 吗?
  • 比如
    • ord函数

ord函数的参数类型

  • ord函数 和 bin函数有什么不一样呢?
    • 查一下 ord的帮助

图片描述

  • ord的参数 要的是
    • 一个单字的字符串(str)
      • 需要有引号的
  • 如果 偏给他一个整数(int)
    • 会如何呢?

图片描述

  • 要的是字符(str)
    • 给的是整数(int)
  • 又报TypeError了

报错

  • 不要害怕报错
    • 报错是我们努力的见证
    • 而不是我们无能的见证
    • 程序员 要做的就是
      • 报错
        • 变成 不报错!

图片描述

  • ord("a")得到的是 整数(int)结果
    • 把这个结果
      • 送到bin函数里面
        • 当参数会如何?

嵌套调用

#找到a对应的序号的二进制形式
bin(ord("a"))
  • 这就很像
    • ord(chr(97))
    • chr(ord("a"))
    • 括号内的 要进行运算
  • 0b1100001 是二进制数 1100001
  • 0b是 2进制数的 前缀标志

图片描述

  • 可是为什么 2进制 使用 0b 作为前缀?

0b 前缀

  • 0 的起源
    • 0开头
      • 肯定是数字
      • 而不是一个变量名
    • 正常情况下
      • 写数字不会用 0 开头
    • 这保证 0开头
      • 很容易和 一般的 10进制数
        • 区分开
  • c 语言
    • 0b 开头就表示 2 进制数
  • 0b中的 b 如何理解?

b 的起源

  • 0b 的 b 是取自 binary

    • binary
      • 二进制
  • bin函数

    • 可以把 10进制数字 转化为
      • 2进制的 字符串形态
  • 如何理解一个二进制数呢?

  • 我们先回忆 什么叫十进制数

10进制数 按权展开

  • 十进制的数字

    • 在不同位上
      • 代表不同的级别
  • (123)10代表

    • 十进制的一百二十三
      • 也就是
        • 一个百
        • 两个十
        • 三个一

图片描述

  • 个十百千万
    • 位置越高
    • 数字的权重越大
    • 百位上的1 比 个位上的3 大得多
      • 1 x 102 比 3 x 100 大得多

2进制数 按权展开

  • 二进制数 也像 十进制数 一样
    • 只不过原来是10n
    • 现在是2n

图片描述

  • 计算机中 如何将2进制数
    • 转化为10进制数 呢?

直接输出

  • 直接输入0b1100001

图片描述

  • 得到 整型(int)的数字97

    • 输出格式 是十进制数字
  • 虽然 计算机内部

    • 用二进制 来存取数字
  • 但是 给我们展示的时候

    • 用的 还是 十进制
  • python

    • 用0开头表示
      • 其他进制形式的数值
  • 那这个 0b1100001

    • 是否就对应着 字符a 呢?

找到对应关系

图片描述

  • 这个 0b1100001
    • 对应着 97
      • 97 对应着 字符a

图片描述

  • 反过来
    • a的序号的二进制形式
      • 是不是 0b1100001 呢?

找到字符二进制形式

  • 先得到"a"字符的序号(ordinal)
    • 再得到序号的二进制(binary)字符串形式

图片描述

  • 使用函数嵌套的形式

图片描述

  • 这和 ASCII 码表一致么?

和 ASCII 表对比

  • 先读1号位
    • 再读2号位

图片描述

  • 验证成功
    • 这充分证明了我们用的确实是 ASCII 表!!!👏👏
  • 废话!😅

图片描述

  • 为什么 ord生成的数字
    • 默认使用10进制呢?
  • 计算机里面用的不都是二进制吗?

10进制

  • 默认使用 10进制
    • 是因为我们 有10根手指

图片描述

  • 那计算机
    • 为什么 使用二进制 呢?

计算机

图片描述

  • 计算机只有 两根手指

图片描述

两种状态

  • 就像电路只有
  • 电灯只有

图片描述

  • 电路只有
    • 高电平
    • 低电平
  • 所以 只能用二进制
  • 可以 把十进制数
    • 转化为 二进制字符串形态

总结

  • 数制可以转化
    • bin(n)可以把数字转化为 2进制
      • binary
      • 接收 一个整数(int)
      • 得到 一个二进制数形式的字符串

图片描述

  • 二进制(binary) 和 二(two)
    • 怎么看起来
      • 好像 一点关系都没有呢?🤔
  • 我们下次再说!👋