• 2020年3月14日python学习笔记——其他(二进制 十进制 十六进制  字符编码)


    二进制定义:二进制是计算技术中广泛采用的一种数值。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”

    二进制与十进制之间的转换:

    10001

    1*2^4+0*2^3+0*2^2+0*2^1+1*2^0=17

    python 中使用 bin(十进制转换为二进制)

    十进制转换为二进制转换:

    字符编码之文字是如何显示的:————————英文使用美国佬的ASCII码表搞定

    计算机只认识二进制,生活中的数字要想让计算机理解就必须转换成二进制。十进制到二进制的转换只能解决计算机理解数字的问题,那么文字要怎么让计算机理解呢?

     

    可是文字应该怎么转换成数字呢?就是强制转换啊,简单粗暴呀。 我们自己强行约定了一个表,把文字和数字对应上,这张表就相当于翻译,我们可以拿着一个数字来对比对应表找到相应的文字,反之亦然。——————ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)

    ASCII码对应表总共有255个字符:包含英文字符  特殊字符等

    那么问题来了假如我们输入:I like you,计算机怎么断句的呢?怎么识别出来几位代表那个字符呢?

    正是由于这些字符串长的长,短的短,写在一起让我们难以分清每一个字符的起止位置,所以聪明的人类就想出了一个解决办法,既然一共就这255个字符,那最长的也不过是11111111八位,不如我们就把所有的二进制都转换成8位的,不足的用0来替换。

    在这里,每一位0或者1所占的空间单位为bit(比特),这是计算机中最小的表示单位

    每8个bit组成一个字节,这是计算机中最小的存储单位(毕竟你是没有办法存储半个字符的)

     以上方式解决解决了英文和二进制转换关系,那么汉子怎么办呢?————————中文使用GB2312编码表搞定

    美国佬设计ASSCII码的时候应该是没考虑中国人有一天也能用上电脑, 所以根本没考虑中文的问题,上世界80年代,电脑进入中国,把砖家们难倒了,妈的你个一ASSCII只能存256个字符,我常用汉字就几千个,怎么玩???勒紧裤腰带还苏联贷款的时候我们都挺过来啦,这点小事难不到我们, 既然美帝的ASCII不支持中文,那我们自己搞张编码表不就行了, 于是我们设计出了GB2312编码表,长成下面的样子。一共存了6763个汉字。

    这个表格比较大,像上面的一块块的文字区域有72个,这导致通过一个字节是没办法表示一个汉字的(因为一个字节最多允许256个字符变种,你现在6千多个,只能2个字节啦,2**16=65535个变种)。

    有了gb2312,我们就能愉快的写中文啦。

    但我们写字竟然会出现中英混杂的情况,比如“我是小猿圈,我的英文名叫Apeland.”, 这种你怎么办?这就要求你必须在gb2312里同时支持英文,但是还不能是2个字节表示一个英文字母。人家ASCII用一个字符,你用2个,那一个2mb大小的英文文档只要一改编码,就立刻变成4mb, 太坑爹,中国人你有钱也不能这么造呀。 所以中国砖家们又通过神奇手段兼容了ASSCII, 即遇到中文用2个字节,遇到英文直接用ASCII的编码。怎么做到的呢?

    如何区别连在一起的2个字节是代表2个英文字母,还是一个中文汉字呢? 中国人如此聪明,决定,如果2个字节连在一起,且每个字节的第1位(也就是相当于128的那个2进制位)如果是1,就代表这是个中文,这个首位是128的字节被称为高字节。 也就是2个高字节连在一起,必然就是一个中文。 你怎么如此笃定?因为0-127已经表示了英文的绝大部分字符,128-255是ASCII的扩展表,表示的都是极特殊的字符,一般没什么用。所以中国人就直接拿来用了。

    自1980年发布gb2312之后,中文一直用着没啥问题,随着个人电脑进入千家万户,有人发现,自己的名字竟然打印不出来,因为起的太生僻了。

    于是1995年, 砖家们又升级了gb2312, 加入更多字符,连什么藏语、维吾尔语、日语、韩语、蒙古语什么的统统都包含进去了,国家统一亚洲的野心从这些基础工作中就可见一斑哈。 这个编码叫GBK,一直到现在,我们的windows电脑中文版本的编码就是GBK.

    时代在变迁,计算机这好东西就在各国使用起来,那问题来了每个国家搞自己的编码,导致日本的程序在中国安装自己乱码了,那么怎么解决呢?

    Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode 2-4字节 已经收录136690个字符,并还在一直不断扩张中…

    Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode

    Unicode有2个特点:

    支持全球所有语言

    可以跟各种语言的编码自由转换,也就是说,即使你gbk编码的文字 ,想转成unicode很容易。

    为何unicode可以跟其它语言互相转换呢?

    因为有跟所有语言都有对应关系哈,这样做的好处是可以让那些已经用gbk或其它编码写好的软件容易的转成unicode编码 ,利于unicode的推广。 下图就是unicode跟中文编码的对应关系

    UTF-8的出现原因:

    新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,由于计算机的内存比较大,并且字符串在内容中表示时也不会特别大,所以内容可以使用unicode来处理,但是存储和网络传输时一般数据都会非常多,那么增加1倍将是无法容忍的!!!

    为了解决存储和网络传输的问题,出现了Unicode Transformation Format,学术名UTF,即:对unicode字符进行转换,以便于在存储和网络传输时可以节省空间!

      • UTF-8: 使用1、2、3、4个字节表示所有字符;优先使用1个字符、无法满足则使增加一个字节,最多4个字节。英文占1个字节、欧洲语系占2个、东亚占3个,其它及特殊字符占4个
      • UTF-16: 使用2、4个字节表示所有字符;优先使用2个字节,否则使用4个字节表示。
      • UTF-32: 使用4个字节表示所有字符;

    总结:UTF 是为unicode编码 设计 的一种 在存储 和传输时节省空间的编码方案。

    如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:

    十六进制:

    定义:16进制,英文名称Hexadecimal(简写Hex), 在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15,这些称作十六进制数字,比如十进制13用16进制表示是D, 28用16进制是1C。

    使用场景:16进制在计算机领域应用普遍,常见的有htmlcss的颜色表、mac地址、字符编码等都用16进制来表示。 这是因为将4个位元(Bit)化成单独的16进制数字不太困难。1字节可以表示成2个连续的16进制数字。可是,这种混合表示法容易令人混淆,因此需要一些字首、字尾或下标来显示,在C语言、C++、Shell、Python、Java语言及其他相近的语言使用字首“0x”来标示16进制,例如“0x5A3”代表1443。

    16进制转换10进制

    为何“0x5A3”代表1443呢? 怎么算出来的?

    16进制数转10进制数的原理:1000=1X16^3(16的3次方)+0X16^2(16的2次方)+0X16(16的1次方)+0X1(16的0次方)=4096。

    A = 10, B = 11,,C =12,D=13,E=14,F= 15。

    FFF=15(16^2) + 15(16^1) + 15*(16^0) = 4095。

    10进制转16进制算法

    除16取余数得最低1位,然后把商继续除得第2位,直到商等于0

    举例:

      1. 65036 16,余数 12(C),商4064
      2. 4064 16,余数 0(0),商254
      3. 254 16,余数 14(E),商15
      4. 1516,余数 15(F),商0,结束
      5. 16进制为 FE0C

    备注:16进制只是一种展示手法,相比2进制展示的更短更易换算,就像我们看10进制一样, 计算机底层运行的肯定还是二进制

  • 相关阅读:
    版本控制-搭建git服务器
    借助阿里AntUI元素实现两个Web页面之间的过渡——“Loading…”
    在VS中自定义代码段
    案例研究:CopyToAsync
    与其他.Net异步模式和类型进行互操作
    使用boilerplate模版创建解决方案
    实践基于Task的异步模式
    实现基于Task的异步模式
    基于Task的异步模式的定义
    基于Task的异步模式--全面介绍
  • 原文地址:https://www.cnblogs.com/jianchixuexu/p/12571154.html
Copyright © 2020-2023  润新知