三十7位二进制编码可以表示多少个字符需要使用几个二进制位?

先看一下几个概念
1. bit,也叫比特、位bit是计算机中最小的计量单位,我们常见的就是32bit和64bit,这里是指CPU一次处理数据的能力是32位还是64位。1个比特值只能是 0 或 1,它是一个二进制位,即 1 bit = 1个二进制位2. Byte,字节Byte是计算机中次小的计量单位,是内存布局中的常用单位。字节 与 位 的关系: 1 字节 = 8 bit 即 1 字节 = 8 个二进制位关于字节单位除了Byte, 还有KB(千字节)1 KB = 1024 Byte、MB、GB、TB。3. Character,字符字符是计算机中使用的字母、数字、字和符号等,一般 1个英文字符或字符数字占用一个字节,一个汉字占用两个字节,当然在不同编码中汉字的字节表示是不同的。关于字节和字符的应用,常见的比如java语言的char字符类型(16位)和byte类型(8位)。4. 进制在计算机中进制有 二进制、八进制、十进制和十六进制。二进制 Binary,简称 B,二进制只有 0 和 1 两个值,计算方法即 逢二进一。八进制 Octcal,简称 O(因O和0容易混淆,八进制用 数字+ Q 来表示)八进制有 0~7 一共8个值,计算方法 逢八进一。十进制 Decimal,简称 D,十进制有 0~9 一共10个值,计算方法 逢十进一。十六进制 Hexadecimal,简称 H,十六进制有 0~9 和字母 A ~ F一共16个值来表示“0 ~15”,计算方法 逢十六进一。其中A表示10,B表示11,以此类推。所有进制都可以在数字后+缩写来表示进制,比如 1B表示二进制、7Q表示八进制、5D表示十进制、1DH表示十六进制,进制缩写在最后一位。计算机是以二进制作为基础,在此之上上拓展了八进制、十进制、十六进制等。学过数字电路的人应该了解,进制语中数字电路的高低电平、开关、有无、真假等都是通过二进制来表示,逻辑电路也是0和1。二进制的特点就是进制简单、方便转换到其他任一进制、运算规则也简单,比较适用于运算。但是由于二进制在表示大数据时位数太多不便于存储记录,八进制、十六进制也出现来将二进制转换成对应进制方便收集数据。其中十六进制使用频率要高于八进制。二进制与八进制a. 二进制转八进制三合一法,将二进制数从小数点开始向左(或向右)每三位做分割,三位一组,小数点左侧不足三位的左边补0,小数点右不足三位的右侧补零,然后按照000、001、010、011、100、101、110、111分别转化为0、1、2、3、4、5、6、7,即可把原来的二进制数转化为八进制数。比如:
1101 1111.1101 B011 011 111 . 110 100 =》3 3 7.6 4Q
b.八进制转二进制两种方法,把每个数字看成单独分组,单独用二进制表示(4 2 1)
374Q3 => 3是2+1,即 0 1 17 => 7是4+2+1,即 1 1 14 => 4是4,即 1 0 0拼接就是011 111 100 =》11111100B
第二种 将每个数字除以2取余,余数自下而上列出,不够三位左侧补零
374Q3:3/2=1余11/2=0余1自下而上只两位,左侧补零 0117:7/2=3余13/2=1余11/2=0余1自下而上够三位,1114:4/2=2余02/2=1余01/2=0余1自下而上够三位,100拼接一起就是 011111100 =》11111100B
二进制和十进制a. 二进制转十进制将二进制按权展开,每一位都是2的N次幂,小数部分是2的-N次幂。关于二进制:java中byte类型取值范围是 -128~127,而C#中byte类型范围则是0 ~256,这是因为java中的byte类型虽然是八位,但是首位用来表示正负,当首位是0时为正数,首位是-1时为负数。因此若是带符号的二进制,需要将首位去掉再计算。比如上述 1011 0111若首位表示正负,则表示为负数,去掉1后,将剩下的取反操作,也就是它的反码,所谓反码就是0和1相互转换,那么处理后就变为: 100 1000,对应数为72,再+1后取负,则为 -73。总结二进制带符号转换十进制流程:去首位,若为负 取反 +1,若为正 直接计算 不需要+1,最后加上符号b. 十进制转二进制十进制整数部分除以2取余,小数部分乘2取整随便找个例子,大家了解一下就行,不想算的打开程序员计算器转换二进制和十六进制a. 二进制转十六进制和八进制的三合一类似,转十六进制时用四合一方法,对应8421
无符号: 001001001010 => 0010 0100 10100010 对应2位为1,则0010 是20100 对应4位为1,取41010对应8和2位为1,取10即a对应十六进制为24A
b. 十六进制转二进制每个数字分开除以2取余,不足四位整数左侧补零,小数右侧补零
24A2 =》 00104 =》 0100A =》1010
写个例子,算出十进制下586和-586的三种进制值586:二进制: (整个数除以2取余)1001001010B八进制:(二进制三合一 001 001 001 010)1112Q十六进制:(二进制四合一 0010 0100 1010)24A-586:二进制:(586的二进制四个一组,在最左面+1即表示负号位)0010 0100 1010 => 1000 0010 0100 1010(整体除符号位反码)=> 1111 1101 1011 0101(补码+1)=> 1111 1101 1011 0110八进制: (对应最后的二进制转八进制)176666Q十六进制:(对应最后的二进制转十六进制)FDB65. 常见的编码格式对比(1)ASCII(American Standard Code for Information Interchange)美国标准信息交换代码ASCII 是基于拉丁字母的一套编码系统,主要用于显示现代英语和其他西欧语言。是现今最通用的单字节编码系统,等同于国际标准 ISO/IEC 646。ASCII 前128个使用指定的 7位二进制数(剩下的1位二进制为0)来表示所有的大小写字母、数字0~9、标点等128中字符,也被称为 标准ASCII 码。后128个称为扩展ASCII码,用来表示一些特殊符号、图形、外来语字母等。(2)GBK编码由于ASCII编码不支持中文,国人就定义了一套编码规则,即GBK码。GB2312: 当字符小于127位时,与ASCII的字符相同,但当两个大于127的字符连接在一起时,就代表一个汉字,第一个字节称为高字节(从0xA1-0xF7),第二个字节为低字节(从0xA1-0xFE),这样大约可以组合7000多个简体汉字。GBK标: 由于汉字太多,有的汉字无法用GB2312表示,所以重新定义了中文编码:只要第一个字节是大于127,就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。GBK标包括了GB2312的所有内容,同时新增了近20000个新的汉字(包括繁体字)和符号。GB18030又扩展了近几千个少数民族的字符。这一系列编码的标准统称为"DBCS"(Double Byte Charecter Set 双字节字符集)。(3)Unicode编码由于每个国家都定义一套自己的编码标准,结果相互之间谁也不懂谁的编码,因此 ISO(国际标准化组织)定义了一套编码方案来解决所有国家的编码问题,就是Unicode。注意Unicode不是一个新的编码规则,它是一套字符集(为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)),可以将Unicode理解为一本世界编码的字典。ISO规定:每个字符必须使用俩个字节,即用16位二进制来表示所有的字符,对于ASCII编码表里的字符,保持其编码不变,只是将长度扩展到了16位,其他国家的字符全部统一重新编码。由于传输ASCII表里的字符时,实际上可以只用一个字节就可以表示,所以,这种编码方案在传输数据比较浪费带宽,存储数据比较浪费硬盘。(4)UTF-8编码为了解决 Unicode比较浪费网络带宽和硬盘 这个问题,就在Unicode的基础上,定义了一套编码规则(将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)),这个新的编码规则就是UTF-8,采用1-4个字符进行传输和存储数据。编码规则:使用下面的模板进行转换Unicode符号范围(十六进制)
UTF-8编码方式(二进制)0000 0000-0000 007F
0xxxxxxx0000 0080-0000 07FF
110xxxxx 10xxxxxx0000 0800-0000 FFFF
1110xxxx 10xxxxxx 10xxxxxx0001 0000-0010 FFFF
11110xxx 10xxxxxx 10xxxxxx 10xxxxxxutf-8区分每个字符的开始是根据字符的高位字节来区分的,比如用一个字节表示的字符,第一个字节高位以“0”开头;用两个字节表示的字符,第一个字节的高位为以“110”开头,后面一个字节以“10开头”;用三个字节表示的字符,第一个字节以“1110”开头,后面俩字节以“10”开头;用四个字节表示的字符,第一个字节以“11110”开头,后面的三个字节以“10”开头。编码参考链接:https://www.cnblogs.com/klb561/p/12064095.html}

我要回帖

更多关于 7位二进制编码可以表示多少个字符 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信