精华内容
下载资源
问答
  • 这里也可以进行类似十进制中四舍五入的操作:假如要保留4位二进制小数,若第五位二进制小数位为0则不进位,若第五位二进制小数位为1则进位。 Example 1 十进制数:18.6875 整数部分=18 18/2 => 商=9...

      虽然不是专业的CS出生,想想接触CS相关的东西也这么久了,居然不知道浮点数在内存中的表示是怎样的,实在是惭愧啊!于是最近查阅了相关资料,终于弄清了浮点数在内存中的表示,现在对相关的东西做一个总结。
      以下总结主要来至于文档 A Tutorial on Data Representation Integers, Floating-point Numbers, and Characters 中的内容。当然还参考了其它一些朋友的文章以及自己的总结。

    十进制数转换为二进制数

    十进制数转换为二进制数时,整数部分和小数部分分别处理。至于十进制数转换为八进制,十六进制数,原理差不多,只是乘除的基不同。

    • 整数部分
      将整数部分除以2,取余数。然后将商除以2,取余数。然后将商除以2,取余数。重复以上商除以2,取余数的过程直到商为0为止。最后十进制数整数部分转换得到的二进制数为以上得到的余数的逆序排列,即转换得到的二进制数的最高位为最后的余数,最低位为得到的第一个余数。
    • 小数部分
      将小数部分乘以2,取整数部分。然后将上一步得到的小数部分乘以2,取整数部分。重复以上过程知道小数部分为0为止。最后十进制数小数部分转换得到的二进制数为以上得到的取整数的顺序排列,即转换得到的二进制数的最高位为第一个取整数,最低位为最后得到的取整数。小数部分比较特殊的一点是,可能会出现多次乘2后小数部分永远不为0的情况出现,这时可以根据精度的要求取特定位数的小数即可。这里也可以进行类似十进制中四舍五入的操作:假如要保留4位二进制小数,若第五位二进制小数位为0则不进位,若第五位二进制小数位为1则进位。

    Example 1
    十进制数:18.6875

    • 整数部分=18
      18/2    => 商=9 余数=0
      9/2     => 商=4 余数=1
      4/2     => 商=2 余数=0
      2/2     => 商=1 余数=0
      1/2     => 商=0 余数=1
      因此,18D= 10010B

    • 小数部分=0.6875
      0.6875*2=1.375    => 取整: 1
      0.375*2=0.75      => 取整: 0
      0.75*2=1.5       => 取整: 1
      0.5*2=1.0       => 取整: 1
      因此 0.6875D = 0.1011B

    最后可得: 18.6875D = 10010.1011B
    Example 2
    十进制数:1.1

    • 整数部分=1
      1/2    => 商=0 余数=1
      因此,1D= 1B

    • 小数部分=0.1
      0.1*2=0.2      => 取整: 0
      0.2*2=0.4      => 取整: 0
      0.4*2=0.8      => 取整: 0
      0.8*2=1.6      => 取整: 1
      0.6*2=1.2      => 取整: 1
      0.2*2=0.4      => 取整: 0
      …..(无限循环)
      假设此时保留四位小数。此时第五位小数位1,因此进一位。因此 0.1D ≈0.0010=B

    最后可得: 1.1D≈1.0010B

    浮点数在内存中的表示

    我想大家对整数在内存中的表示已经比较熟悉了。整数分为无符号数和有符号数。有符号数也就是整数和负数,正数和负数在计算机内存中的表示是不同的。不过要注意的是整数在计算机中内存中有一个大端模式与小端模式的问题。

    • 大端模式是指数据的低位字节保存在内存的高地址中,而数据的高位字节保存在内存的低地址中;
    • 小端模式是指数据的低位字节保存在内存的低地址中,而数据的高位字节保存在内存的高地址中。

    十六进制数0x1234分别在大端模式和小端模式下在内存中的存储形式如图1所示:

     
    图1.
      接下来转入正题,开始来谈一谈浮点数在内存中的存储形式。浮点数一般用科学计数法表示成 F×rE ,这里F表示小数部分,E表示指数部分,r为基。E和F均可以为正数或负数。十进制数的r为10,二进制的r为2。浮点数的科学计数法表示并不是唯一的。例如,上小节提到的十进制小数18.6875可以表示为: 186.875×101 1.86875×101 0.186875×102 。十进制小数18.6875对应的二进制表示形式为10010.1011。该二进制形式用科学计数法又可以表示为 10010.1011×21 1001.01011×21 100.101011×22 10.0101011×23 1.00101011×24 。   科学计数法有一种“规范化的形式”。在规范化形式中要求 1<=|F|<r 。在十进制中 1<=|F|<10 , 在二进制中 1<=|F|<2 。因此在十进制和二进制浮点数的规范化的形式中,小数部分F的小数点前面仅有一位非零整数,特别在二进制浮点数中小数点前的一位非零整数固定为1(浮点数0,接近0的非常小的正数,接近0的非常小的负数,正无穷大,负无穷大,非数NaN(Not a Number)除外)。在规范化形式中,二进制浮点数可以表示为 (1)S(1.FR)2E (不适用于特殊情况),这里FR为 |F| 中的小数部分。二进制浮点数10010.1011的规范化形式为 (1)01.00101011×24 S=0,FR=00101011,E=4 。   现代计算机采用IEEE 754标准来存储规范化形式的浮点数,主要有32位单精度和64位双精度。浮点数在计算机内存中的32位单精度存储格式如图2所示。 S (共一位)存储S的值,表示浮点数的正负,0代表正数,1代表负数,即 S=S E (共八位)存储规范化的浮点数的实际指数部分E,但是这里存储的不是E本身,而是存储的 E+127 的值,即 E=E+127 ,细节会在后续说明。 FR (共23位)存储规范化浮点数的 |F| 中的小数部分FR,即 FR=FR 。这是由于在规范化的形式下二进制浮点数的F中小数点前一位为固定一位的非零整数1,因此就没有存储这一位而只存储了FR,这样也节省了一个比特位的存储空间。当然这里没有考虑到一些特别的数,接下来会详细说明。
     
    图2.
      这里比较特别的一点是,虽然实际的指数E可正可负,但是作为存储指数部分的E的 E 是被当做一个无符号数,因此 E 的范围是0到255。也就是说这里存储的并不是指数的实际值。这256个值又可以分为三个部分来说明: - E=0 ,这时可以表示4种特别的数,且默认F中小数点前一位为0而不是1,实际的指数E为-126: - 正0: S=0,FR=0 。 - 负0: S=1,FR=0 。 - 接近0的很小的正数: S=0,FR0 。 - 接近0的很小的负数: S=1,FR0 。 - E=255 : - 正无穷大: S=0,FR=0 。 - 负无穷大: S=1,FR=0 。 - 非数NaN: S=10,FR0 。 - 1<=E<=255 ,这时实际的指数值E为 126<=(E127)<=127 , 这里不存储实际的指数值而进行这样的操作是为了同时表示正指数和负指数(我也没怎么弄清!!!)。S的值,0代表正数,1代表负数,FR存储规范化浮点数的 |F| 中的小数部分FR。 多嘴一下,固定的比特位数能够表示的数时有限的,但是任一区间中的实数都是无限的,因此有些实数只能以近似的表示,这样就会出现精度缺失。
    二进制浮点数在内存中的存储形式实例(32位,单精度)
    • 18.6875D = 10010.1011B= (1)01.00101011×24 S=0,FR=00101011,E=4=131127=>E=131=(10000011)2
       

    图3.

    • 负0: S=1,FR=00000000000000000000000,E=126E=00000000 。此时默认小数点前的一位整数为0。
       

    图4.

    • 正无穷大 : S=0,FR=00000000000000000000000,E=11111111 ,这一类数就没有什么实际指数E以及小数点前的一位整数的问题。
     
    图5.
    二进制浮点数在内存中的存储形式实例(64位,双精度)

      64位双精度浮点数的存储格式如图6所示:

     
    图6.
      从图6可知64位双精度浮点数的存储格式与32位单精度的存储形式类似,只是存储各部分的比特位的个数不同。还有处理实际指数值E的偏执值也不同,在32位单精度时是127,在64位双精度时是1023。 S (共一位)存储S的值,表示浮点数的正负,0代表正数,1代表负数,即 S=S E (共11位)存储规范化的浮点数的实际指数部分E,但是这里存储的不是E本身,而是存储的 E+1023 的值,即 E=E+1023 FR (共52位)存储规范化浮点数的 |F| 中的小数部分FR,即 FR=FR
    常用字符编码
    • 7比特ASCII编码(又名:US-ASCII, ISO/IEC 646, ITU-T T.50)
      • ASCII编码最早使用7个比特位来表示128个字符,现在已被扩展为8个比特位(在早期的电脑上第八个比特位用来作为奇偶校验之用)。
      • 32D-126D是可打印的字符。0D-31D和127D是特殊的不可打印的控制字符。这些不可打印的字符许多在早期被用来进行传输控制,现在许多已经不再使用
    • 8比特Latin-1(又名 ISO/IEC 8859-1)

      • Latin-1也是8比特编码,其向下兼容ASCII编码。即其0D-127D编码与ASCII编码相同。其编码128D-159D没有分配,编码160D-255D有分配字符。ISO/IEC 8859标准其实是一系列8比特编码标准,一共有16个部分,第十二部分现在已经被丢弃。Latin-1属于其第一部分。每一部分除了160D-255D处分配的字符不同,其它编码分配的字符都与Latin-1相同,十六个部分的160D-255D这一段编码分别对应了西欧不同国家的字符。
    • 其它对ASCII编码进行扩展的8比特编码

      • ANSI (American National Standards Institute) (又名Windows-1252或者Windows 代码页 1252)。其基本与ISO/IEC 8859-1相同,只不过它对ISO/IEC 8859-1没有分配的128D-159D这一段进行了分配,即分配了一些字符。
      • EBCDIC (Extended Binary Coded Decimal Interchange Code)主要用在早期的IBM电脑上。其先于ASCII编码出现。EBCDIC编码具有英文字母的不连续性以及中间出现多次断续的一些不便利性。ASCII编码参考了EBCDIC编码,且消除了这些不便利性。
    • Unicode 编码(又名ISO/IEC 10646通用字符集) :Unicode 编码出现之前没有没有一个单一的字符编码方案可以表示所有语言中的字符。而Unicode 编码正是为了这样的目的而出现的。Unicode 编码向下兼容ASCII编码和Latin-1编码。即前128个字符编码与ASCII编码相同,前256个字符编码与Latin-1编码相同。Unicode 编码有两种编码方案:

      • UCS-2(两个字节): 一共可以表示65536个字符,但是其中有些16位比特组合没有被赋予字符。 UCS-2里面所包含的字符覆盖了当前在使用的主要语言的所有字符。这一部分被称作Basic Multilingual Plane (BMP)。UCS-2目前已经过时。
      • UCS-4(4个字节):包含Basic Multilingual Plane (BMP,0000H-FFFFH)以及不常用的一些字符(Supplementary Characters,1FFFFH-10FFFFH)。
    • UTF-8编码:当文本中包含大量的ASCII字符时,unicode的2字节或4字节编码效率太低且浪费空间。UTF-8编码使用1-4个字节来表示Unicode 编码中对应的一个字符。变长编码方案可以改善效率太低且浪费空间的这种情况。
    • UTF-16编码:与UTF-8编码类似,也是针对unicode的变长编码方案。只不过2-4字节。
    • UTF-16编码:同UCS-4。
    • BOM (Byte Order Mark)是一个特殊的unicode编码(FEFFH)字符,它用来区分多字节字符(unicode)文本文件内存存储的大端与小端格式。若BOM在内存中的存储格式为FFFEH,则为小端模式。若BOM在内存中的存储格式为FEFFH,则为大端模式。(假设地址从左到右上升)
    • 字符编码方案在windows中称为代码页(codepage)
    • 中文字符集:
      • GB2312/GBK:GB2312使用两个字节来表示简体中文字符。GBK是对GB2312的扩展,同时包含了更多字符和繁体中文字符。
      • BIG5使用两个字节来表示繁体中文字符,它和GBK不兼容。即同样的编码表示不同的字符。

    更多字符编码相关内容可以参考:
    https://www.crifan.com/files/doc/docbook/char_encoding/release/htmls/ch01_enc_background.html

    其它参考博客:
    http://www.cnblogs.com/lds85930/archive/2007/09/19/897912.html
    http://blog.csdn.net/zhaoshuzhaoshu/article/details/37600857/
    http://blog.csdn.net/chy555chy/article/details/52065250

    展开全文
  • bcd码二进制十进制Prerequisite: Number systems 先决条件: 数字系统 BCD Code (8421 Code): In BCD 8421 code, each decimal digit is represented using a 4-bit binary number. The 4-bit binary numbers ...

    bcd码二进制转十进制

    Prerequisite: Number systems

    先决条件: 数字系统

    BCD Code (8421 Code): In BCD 8421 code, each decimal digit is represented using a 4-bit binary number. The 4-bit binary numbers have their weights attached as 8, 4, 2, 1 from MSB to LSB side. Since the weights are attached to it comes in the category of weighted codes and is also sequential.

    BCD代码(8421代码) :在BCD 8421代码中 ,每个十进制数字均使用4位二进制数表示。 从MSB到LSB,4位二进制数的权重分别为8、4、2、1。 由于权重是附加的,因此它属于加权代码类别,并且是顺序的

    In a digital system that accepts only binary numbers in form of 0 and 1, the only way to interpret decimal numbers is its conversion from decimal to binary and vice-versa which is a slow process and it also requires a huge electronic circuitry. So, we use BCD numbers. Also, the sequential nature of BCD numbers makes it advantageous for performing arithmetic operations.

    在仅接受0和1形式的二进制数字的数字系统中,解释十进制数字的唯一方法是将其从十进制转换为二进制,反之亦然,这是一个缓慢的过程,并且还需要庞大的电子电路。 因此,我们使用BCD号码。 而且,BCD编号的顺序性质使其在执行算术运算时具有优势。

    Although, there are many advantages there are some disadvantages too such as:

    尽管有很多优点,但也有一些缺点,例如:

    BCD codes are more inefficient than usual binary codes. Usually, in binary numbers, we represent (13)10 = (1101)2 i.e., we require 4-bits but in BCD notation (13)10 is represented as (0001 0011). Here, we require 8-bits to represent the same 13.

    BCD代码比普通的二进制代码效率低。 通常,在二进制数中,我们表示(13) 10 =(1101) 2,即,我们需要4位,但在BCD表示法中, (13) 10表示为(0001 0011) 。 在这里,我们需要8位来表示相同的13

    Another disadvantage is that arithmetic operations become more complex as compared to the usual binary numbers because, in BCD numbers, we have 6 illegal states as 1010, 1011, 1100, 1101, 1110 and 1111 which are not part of 8421 BCD system.

    另一个缺点是,与通常的二进制数相比,算术运算变得更加复杂,因为在BCD数中,我们有6个非法状态,例如1010、1011、1100、1101、1110和1111 ,它们不是8421 BCD系统的一部分。

    The following table describes the relation between Decimal, Binary and 8421 BCD numbers.

    下表描述了十进制,二进制和8421 BCD编号之间的关系。

    Decimal NumbersBinary Numbers8421 BCD Numbers
    000000000
    100010001
    200100010
    300110011
    401000100
    501010101
    601100110
    701110111
    810001000
    910011001
    1010100001 0000
    1110110001 0001
    1211000001 0010
    1311010001 0011
    1411100001 0100
    1511110001 0101
    .........
    .........
    .........
    小数 二进制数 8421 BCD编号
    0 0000 0000
    1个 0001 0001
    2 0010 0010
    3 0011 0011
    4 0100 0100
    5 0101 0101
    6 0110 0110
    7 0111 0111
    8 1000 1000
    9 1001 1001
    10 1010 0001 0000
    11 1011 0001 0001
    12 1100 0001 0010
    13 1101 0001 0011
    14 1110 0001 0100
    15 1111 0001 0101
    ... ... ...
    ... ... ...
    ... ... ...

    Example 1: Represent (28)10 and (53)10 in 8421 BCD notation

    示例1:以8421 BCD表示法表示(28) 10和(53) 10

    Solution:

    解:

    (28)10 in BCD notation can be represented as (0010 1000).

    (28) BCD表示法中的10可以表示为(0010 1000)

    Similarly, (53)10 in BCD notation can be represented as (0101 0011).

    类似地,BCD表示法中的(53) 10可以表示为(0101 0011)

    BCD加法 (BCD Addition)

    The addition of BCD numbers is slightly different from binary addition. Here, the rules of binary addition are partially applicable only to the individual 4-bit groups. The BCD addition, is thus carried out by individually adding the corresponding 4-bit groups starting from the LSB side and if there is a carry to the next group, or if the result belongs to any of the 6 illegal states than we add 610(0110) to the sum term of that group and resulting carry is added in the next group.

    BCD编号加法二进制加法略有不同。 在此,二进制加法规则仅部分适用于各个4位组。 因此, BCD加法是通过从LSB端开始逐个添加对应的4位组来进行的,如果下一个组有进位,或者结果属于6个非法状态中的任何一个,则我们加6 10 (0110)至该组的总和,并在下一组中添加产生的进位。

    Example: Perform BCD Addition of 6 and 7.

    示例:执行6和7的BCD加法。

    Solution: BCD representation of 6 is given as 0110 and for 7 it is 0111.

    溶液:6 BCD表示被给定为011070111。

    BCD Addition | Example 1

    When we add 6 and 7 in BCD, we get 1101 which is an invalid state therefore, we add 0110 (6) to the sum to get correct result which is 0001 0011 (13).

    当在BCD中将67相加时,我们得到1101 ,这是一个无效状态,因此,我们将0110(6)添加到总和中以获得正确的结果0001 0011(13)

    Example 2: Perform BCD Addition of 8765 and 3943.

    示例2:执行8765和3943的BCD加法。

    Solution:

    解:

    BCD representation of 8765 is given as 1000 0111 0110 0011 and for 3943 it is 0011 1001 0100 0011.

    BCD表示的87651000 0111 0110 0011,39430011 1001 0100 0011

    BCD Addition | Example 2

    Firstly, we will perform a normal binary addition of two numbers now we see 1100 and 1010 which are illegal states also the third group of 4-bits from LSB side i.e., 0000 has a carry 1 to the next group. So, for correction, we have to add 0110 to all three groups. Thus, we get the correct result as 0001 0010 0111 0000 1000 which is equivalent to (12708)10 in decimal number system and this is what we get on adding (8765)10 + (3943)10 = (12708)10. Hence, our result is also verified.

    首先,我们将对两个数字进行正常的二进制加法运算,现在我们看到11001010是非法状态,也是从LSB侧开始的第三组4位,即0000的进位为1 。 因此,为了更正,我们必须在所有三个组中添加0110 。 因此,我们得到正确的结果为0001 0010 0111 0000 1000 ,它等于十进制数系统中的(12708) 10 ,这就是我们加上(8765) 10 +(3943) 10 =(12708) 10的结果 。 因此,我们的结果也得到了验证。

    翻译自: https://www.includehelp.com/basics/binary-coded-decimal-bcd-code-and-its-addition.aspx

    bcd码二进制转十进制

    展开全文
  • 2)转为不同进制数值并显示,如二进制、八进制、十进制和十六进制等; 3)转为整型、浮点型等数值类型; 4)大小写转换; 5)转为字符串类型; 5.1 Hex转换 把Hex编码转换为char存储到QByteArray: QByteArray text...
    QByteArray在串口通讯中经常被使用,有一定必要较为全面详细的对QByteArray进行阐述。本文通过以下几个部分加以介绍:
    
    1. 初始化
    
    2. 访问与赋值
    
    3. 添加、删除、插入与替换操作
    
    4. 查找与比较
    
    5. 数据转换与处理
    1 初始化
    2 访问与赋值
    
        访问QByteArray主要有4中方式,分别为[]at()、data[]和constData[]。其中[]和data[<
    展开全文
  • 二进制和量化编码

    2021-04-18 00:11:20
    小数 10 进制转二进制: 如 0.8, 转为 2 进制要: 0.8×2=1.6→10.6×2=1.2→10.2×2=0.4→00.4×2=0.8→00.8×2=1.6→1⋮×2=⋮→⋮ \begin{aligned} 0.8 \times 2=1.6\to1 \\ 0.6\times2=1.2\to1\\ 0.2\times2=0.4...

    小数 10 进制转二进制:

    如 0.8, 转为 2 进制要:

    0.8 × 2 = 1.6 → 1 0.6 × 2 = 1.2 → 1 0.2 × 2 = 0.4 → 0 0.4 × 2 = 0.8 → 0 0.8 × 2 = 1.6 → 1 ⋮ × 2 = ⋮ → ⋮ \begin{aligned} 0.8 \times 2=1.6\to1 \\ 0.6\times2=1.2\to1\\ 0.2\times2=0.4\to0\\ 0.4\times2=0.8\to0\\ 0.8\times 2=1.6\to1\\ \vdots\times 2=\vdots\to\vdots \end{aligned} 0.8×2=1.610.6×2=1.210.2×2=0.400.4×2=0.800.8×2=1.61×2=

    所以 0.8 的最终结果就是 0.110011001100…
    在这里插入图片描述

    步骤就是:
    一直乘以 2,将 1 提取出来,然后用小数再乘以 2,直到出现 1 时停止。 像 0.8 这种,得不到 1 的,就只能无限循环。

    浮点数二进制表示

    要表示浮点数,首先应该将其转化为二进制:
    十进制转二进制实例为了用计算机去表示上述的二进制浮点数,还需要将数表示成: a , a ∈ [ ( 1 ) 2 , ( 10 ) 2 ) a,a\in[(1)_2,(10)_2) a,a[(1)2,(10)2) 与 2 的 n n n 次幂相乘的形式,同时将 n n n 转为二进制:

    在这里插入图片描述然后,根据下面的格式,将结果“填下”,以 9 位为例:

    ⏟ 整体符号 ⏟ |幂符号| ⏟ 幂 ⏟ 数 \underbrace{\boxed{}}_{\text{整体符号}}\underbrace{\boxed{}}_{\text{|幂符号|}} \underbrace{\boxed{}\boxed{}\boxed{}}_{\text{幂}} \underbrace{\boxed{}\boxed{}\boxed{}\boxed{}}_{\text{数}} 整体符号 |幂符号|
    其中:

    整体符号:
    表示数的整体符号,如 9.6 是正数,故该位置填 0。反之,若是负数,则填 1。
    幂符号:
    若幂是正数,填 0,负数填 1。本例幂为 3,故填 0。
    幂:
    从低到高开始填,不够补 0。如本例幂为 3,二进制为 11,只有两位,故填上 011。
    数:
    从高位开始填,超出截断。但要注意的是,不需要填第一位,因为第一位总是 1。亦上例为例,数为 1.0011001…,其中最前面的 1 不需要管,因为不管数是多少,我们都要表示成 1。所需,需要填的是 0011。

    在这里插入图片描述

    二进制用于量化编码

    量化:
    将连续数值,转换为某个最小单位的整数倍
    编码:
    将量化结果用代码的形式(可以是二进制)表示出来

    我们似乎已经能够将任何 10 进制,包括浮点数,且一个最好的优点是:理论上,误差为 0 。

    但缺点也很明显:

    范围有限
    表达的范围与二进制位数有关。位数决定了表达范围。并且,不能够将所有的 10 进制,都转换为位数一定的二进制,且有些数可能有舍入误差。
    很可能超出所需表达的范围
    假如我们只需要对 [ 0 , 1 ] [0,1] [0,1] 进行编码,那么上述方法极大可能会超范围。不过这能够通过映射来解决:设 x ′ x^\prime x 为二进制对应的十进制, x m a x ′ x^\prime_{max} xmax 为二进制所能表达的最大数, X X X 是我们所需的范围,于是映射就可以为:
    x = X ⋅ x ′ x m a x ′ x=\frac{X\cdot x^\prime}{x^\prime_{max}} x=xmaxXx

    无法实现量化
    :第一: 因为误差来源于10进制转2进制时的舍入误差误差,所以对有些数误差为 0,另一些可能误差很大。
    第二: 将十进制直接转为二进制,并没有将数值表示为最小单位的整数倍。 所以,不能量化。

    基于上述原因,10进制转2进制,非量化而今用于编码。且这个编码可能无法涵盖我们所需要的范围,另一方面,我们无法估计出最大的编码误差。

    量化

    在一些数模转换中,量化是很重要的,下面以表达 [ 0 , 1 ] [0,1] [0,1] ,长度为 8 的二进制量化为例,希望能给大家一些启发:

    对于 8 位二进制,我们可以表示为整数 0 , 1 , 2 , ⋯   , 7 0,1,2,\cdots,7 0,1,2,,7。于是,若可以想办法把 [ 0 , 1 ] [0,1] [0,1] 按如下方式拆分,并用最小单位 Δ \Delta Δ 去代替,则可以完成我们的量化和编码:

    在这里插入图片描述

    其中 Δ \Delta Δ 是一个人工标定的量化单位。我们把落在 [ 0 , 1 / 15 ) [0,1/15) [0,1/15) 的数都视为 0 / 15 0/15 0/15,把 [ 1 / 15 , 3 / 15 ] [1/15, 3/15] [1/15,3/15] 的数都视为 2 / 15 2/15 2/15,由此可知量化最大误差为 1 / 2 Δ 1/2\Delta 1/2Δ

    对于一般情况下:[0,1] 的量化公式如下:

    设二进制表达转换为 10 进制整数为 N d e c N_{dec} Ndec,用 n n n 表示二进制的位数, N q u a n N_{quan} Nquan反量化后数值, N N N 为量化前的数值,则量化公式为:
    N q u a n = 2 N d e c 2 n + 1 − 1         N ∈ [ 2 N d e c − 1 2 n + 1 − 1 , 2 N d e c + 1 2 n + 1 − 1 ) N_{quan}=\frac{2N_{dec}}{2^{n+1}-1}~~~~~~~N\in[\frac{2N_{dec}-1}{2^{n+1}-1},\frac{2N_{dec}+1}{2^{n+1}-1}) Nquan=2n+112Ndec       N[2n+112Ndec1,2n+112Ndec+1)

    误差大小为:
    N − N q u a n N-N_{quan} NNquan

    展开全文
  • (左移、右移、无符号右移)的时候发现十进制数二进制数的时候,负数的位数是够的,比如:负整数 -15 的二进制表示是:11111111111111111111111111110001 ,但是 正整数 15 的二进制表示是:1111,抱着好奇心,...
  • 摘自https://baike.baidu.com/item/%E5%8D%81%E8%BF%9B%E5%88%B6%E8%BD%AC%E4%BA%8C%E8%BF%9B%E5%88%B6 python实现进制转换:... 十进制二进制 编辑 1. 十进制整数转换为二进制整数 十进制整数...
  • 十进制数转(二进制,八进制,十六进制)写在前面进制转换(数学方法)1、 转换为二进制算法解析算法源码2、 转换为八进制算法解析算法源码3、 转换为十六进制算法解析算法源码欢迎评论区评论字符拼接算法工具类源码...
  • 遗传算法的二进制编码

    千次阅读 2020-06-01 20:08:34
    假设我们要用遗传算法求解某个函数的最大值,x的取值范围是[-3.0,12.1],那么我们现在就是要从这个取值范围内...首先一个直观的想法是直接找到十进制对应的二进制,但是如果是那样做就涉及到有符号的二进制数了。 所
  • 一、十进制转换为二进制 十进制二进制,可分为整数转二进制,和小数转二进制 整数转二进制 采用"除2取余,逆序排列"法: ...*如果是0到15,这几个十进制数的转换,可以使用8421码的编码规则,即可轻松实现。 0
  • 与课程中直接抛出公式与概念不同,我想首先与各位探讨"科学计数法"这个概念,进而讨论设计二进制的科学计数法需要涉及到哪些元素。接着,我们讨论如何在内存上表达这个方案。最后讨论计算机的具体实现。科学计...
  • 说起进制转换,许多计算机的入门者都会挠头,觉得转换并不方便。一般教科书都是讲授短除法。我在长期教学中用自己的方法教授该知识,学生可以很快听懂原理,并能举一... 2、二进制转换为十进制的方法:权重相加法 ...
  • 一.本文所涉及的内容... 二进制十进制 八进制 → 十进制 十六进制 → 十进制十进制) → (二、八、十六进制) 十进制二进制 十进制 → 八进制 十进制 → 十六进制 (...
  • 来吧,坐下聊先前在前文《老大说:谁要再用double定义商品金额,就自己收拾东西走...”当时写那篇文章的时候,我原以为大家对于小数转二进制的换算早已了然于胸,所以也就没有给出具体的换算过程。结果文章发出来后...
  • 十进制的转换与任意进制的互转

    千次阅读 2020-01-08 20:50:07
    十进制转任意进制时,将这个十进制数除以进制,比如2(也就是十进制二进制),得到商和一个从0~1的余数,然后再以这个商为被除,除了进制2,继续得到商和一个从0~1的余数。以此方式不断相除,直到得到的...
  • 8421BCD码是一种最常见的二-十进制编码,用四位二进制码0000~1001代表十进制的0~9,它与十进制码的转换十分简单,只需将需要转化的数字改写为对应的二/十进制码即可。 例:(12)10=(00010010)BCD    &...
  • 遗传算法应用 一、问题概述 求 y=10sin(5x)+7*|x-5|+10 最大值。 二、问题解决 1.产生初始种群 用随机数生成器分别产生8、...采用6 位二进制编码。matlab中十进制转二进制函数dec2bin()默认是6位,因此,我们先采用...
  • 小序: 先说一个 bear 的亲身体会,bear 在做一些...led 数码管来做显示,因为它驱动起来比 lcd 液晶要简单的很多,我们知道 fpga 中寄存器在定义和储存的数据都是采用二进制的格式 ,而 fpga 输出给数码 管做显示...
  • 二进制十进制、十六进制理解

    千次阅读 2020-10-21 11:23:12
    1.如何理解二进制十进制、十六进制 点击查看原文 1.1 十进制的理解: 生活中我们遇到的绝大部分数据都是十进制的,比如7、24、30、365等,如果把它们按照个、十、百位分解,可以这样表示: 数值 ...
  • 参考文章: ... 不应该用==号来判断浮点数是否相等,因为... 对于正数而言,原,反,补码都一样, 对负数而言,反码除符号外,在原码的基础上按取反,补码则在反码的基础之上,在其最低上加1,要求移码时,仍然是先求补码...
  • BCD码与十进制转化

    千次阅读 2020-06-13 18:35:40
    BCD码(binary-coded Decimal),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码十进制代码。BCD码这种编码形式利用了四个位元来存储一个十进制的数码,使二进制和...
  • 格雷码(循环碼)是任意两个相邻的代码只有一位二进制数不同的BCD码,它与奇偶校验码同属可靠性编码。 格雷碼(Gray code)是由貝爾實驗室的Frank Gray在1940年提出,用於在PCM(脈衝編碼調變)方法傳送訊號時防止...
  • 二进制和十六进制

    千次阅读 2018-08-16 08:40:17
    课程导言 【最早的编程语言是二进制语言,也是计算机能够直接...通过本篇的学习,你将了解到为什么计算机能够直接识别二进制语言,二进制的计数原理以及与十进制、十六进制之间的数值转换。】   在讲述二进制之...
  • 、八、、十六进制转换(图解篇)

    万次阅读 多人点赞 2017-11-14 21:49:06
    各种进制的用途 10进制,当然是便于我们人类来使用,我们从小的习惯就是使用十进制,这个毋庸置疑。 2进制,是供计算机使用的,1,0代表开和关,有和无,机器只...二进制、八进制、十进制、十六进制之间的转换 ht
  • 十进制二进制,八进制,十六进制的解意和详细转换 十进制 二进制 八进制 十六进制 十进制转换成二进制 十进制转换成八进制进制 十进制转换成十六进制 二进制进制转换成十进制 二进制转换成八进制进制 二进制转换成...
  • 十进制:23383 十六进制:5B57整数部分:十进制转化为16进制,算法十进制除以16得到的余数放最低位,得到的商除以16的余数放倒数第位,紧接着再用此时的到的商除以16得余数放第三位。以此类推。小数部分的计算...
  • 本文介绍了进制转换、编码方式、定点和浮点数、IEEE 754标准
  • 将一个长度最多为30数字的十进制非负整数转换为二进制数输出。 输入:      多组数据,每行为一个长度不超过30十进制非负整数。(注意是10进制数字的个数可能有30个,而非3...
  • 第1节 ASCII码对照表... 1 1.1 ASCII控制字符... 1 1.2 ASCII可显示字符...... 第2节字符的进制转换......2.3 获取字符对应的十六进制字符的第种方法(傻瓜式)... 1 2.4 递归的方法获取字符对应...
  • 详解计算机内部存储数据的形式—二进制数 前言 要想对程序的运行机制形成一个大致印象,就要了解信息(数据)在计算机内部是以怎样的形式来表现的,又是以怎样的方法进行运算的。在 C 和 Java 等高级语言编写的 程序...
  • c语言基础语法进制、原码、反码、补码、输入输出函数进制1、十进制二进制如:666 转成二进制,采用除二反向取余,每次除以二,若每次可以被2整除,则为0,若无法整除,则取余为1,余数继续除二,直到为0则得到结果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,634
精华内容 8,653
关键字:

十进制数转化三位二进制编码