精华内容
下载资源
问答
  • 有符号在计算机中的表示方法
    千次阅读
    2021-01-04 15:20:18

    最近因为要将一个16bit的音频混音算法改成24bit的,复习了有符号数的计算机内的表示方法.

    对负数的二进制表示有些遗忘,在网上找了一下资料,贴出来已备再次遗忘:

    假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:

    00000000 00000000 00000000 00000101

    5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0

    现在想知道,-5在计算机中如何表示?

     

    在计算机中,负数以其绝对值的补码形式表达

    什么叫补码呢?这得从原码,反码说起。

     

    原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。

    比如 00000000 00000000 00000000 00000101 是 5的 原码。

     

    反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。

    取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)

    比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。

    称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。

    反码是相互的,所以也可称:

    11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。

     

    补码:反码加1称为补码。

    也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

    比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。

    那么,补码为:

    11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011


    所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB


    再举一例,我们来看整数-1在计算机中如何表示。

    假设这也是一个int类型,那么:


    1、先取1的原码:00000000 00000000 00000000 00000001

    2、得反码:     11111111 11111111 11111111 11111110

    3、得补码:     11111111 11111111 11111111 11111111


    可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF

     

    整理:

     

     

     

    1个字节,不管怎么样只能表示256个数。因为有符号所以我们就把它表示成范围:-128~+127。它在计算机中是怎么储存的呢?

     

      可以这样理解:用最高位表示符号位(如果是0则表示正数,如果是1则表示负数),剩下的7位用来储存数的绝对值的话,能表示2^7个数的绝对值,再考虑正负两种情况,2^7*2还是256个数。首先定义0在计算机中储存为00000000,对于正数我们依然可以像无符号数那样换算,从00000001到01111111依次表示1到127。那么这些数对应的二进制码就是这些数的原码。

      到这里很多人就会想,那负数是不是从10000001到11111111依次表示-1到-127,那你发现没有,如果这样的话,一共就只有255个数了,因为10000000的情况没有考虑在内。实际上,10000000在计算机中表示最小的负整数,就是这里的-128,而且实际上并不是从10000001到11111111依次表示-1到-127,而是刚好相反的,从10000001到11111111依次表示-127到-1。负整数在计算机中是以补码形式储存的,补码是怎么样表示的呢?这里还要引入另一个概念——反码,所谓反码就是把负数的原码(负数的原码和它的绝对值所对应的原码相同,简单的说就是绝对值的原码)各个位按位取反,是1就换成0,是0就换成1,如-1的原码是00000001,和1的原码相同,那么-1的反码就是11111110,而补码就是在反码的基础上加1,即-1的补码是11111110+1=11111111,因此我们可以算出-1在计算机中是按11111111储存的。

      总结一下,计算机储存有符号的整数时,是用该整数的补码进行储存的,0的原码、补码都是0,正数的原码、补码可以特殊理解为相同,负数的补码是它的反码加1。下面再多举几个例子,来帮助理解! 

    十进制 → 二进制  
    47   → 101111 

    有符号的整数    原码    反码    补码 
     +47      00101111  00101111  00101111(正数的补码和原码、反码相同,不能从字面理解) 
     -47       00101111  11010000  11010001(负数的补码是在反码上加1) 

    更多相关内容
  • 基于 FPGA 的数字表示

    万次阅读 2018-11-13 17:35:41
    文章目录基于 FPGA 的数字表示零、计数系统框架一 、整数的表示1.1 二进制反码1.2 二进制补码二、 非整数值的表示2.1 定点二进制2.2 定点量化2.4 小数部分截断2.5 一种不同的方法 Trounding三、 浮点数定义及表示...

    基于 FPGA 的数字表示



      在FPGA系统中有两个基本准则非常重要,分别为:数字表示法和代数运算的实现。本博文主要介绍数字表示。
      参考文献:数字信号处理的FPGA实现(第3版)中文版 && 基于FPGA的数字信号处理 [高亚军 编著] 2015年版
      可以购买相关书籍进行研读。



    零、计数系统框架

    在这里插入图片描述


    一 、整数的表示

      数字信号处理中需要考虑的基本要点是数字的表示,数字信号处理需要将量值用有限精度的数字表示。 一方面,该表示必须足够准确地处理数字信号处理系统中真实世界的输入和输出; 另一方面, 该表示必须在硬件实现方面具有高效性。
      二进制数的使用是任何数字系统的基础, 当处理大型复杂的 DSP 系统时, 每秒将需要处理数十亿次的乘加运算。 因此, 通过减少位数来降低硬件开销的方法将变得非常有意义。
      假设有一个使用 16 位分辨率运算的 DSP 滤波应用, 因此对于一个 16 位乘 16 位并行乘法 , 硬件开销的量级为 16 X 16 = 256 个单元。 使用 16 位字长的原因是它就是 DSP处理器通常使用的字长, 鉴于习惯仍然选择一样的字长。 在 FPGA世界中可以选择分辨率。 因此, 如果说 9 位分辨率已经足够了, 乘法器的硬件开销即为 9 X 9= 81 个单元。 这大约是使用 16 位计算开销的 30%。
      因此正确选择字长很重要: 使用太多位浪费硬件资源, 而太少则会损失分辨率。 所以, 保证选择正确的字长的前提是掌握算法和 DSP 知识。

    1.1 二进制反码

      可使用二进制反码描述正数和负数。 求一个数的反码只需对所有的位取反。 然而需要注意, 当使用反码时, 有两种表示数字 0 的方法, 通常来说, 用反码并不能直接表示算术运算。
      当在这种数字系统中执行二进制运算时, 将遇到奇怪的问题, 这是由于数字 0 有两个表示版本。 事实上,-0 小于+0,这是由于使用反码表示时: -0+ 1 =+0;+0 -1=-0。
      实现上述功能需要相当复杂的硬件。 实际需要的是这样一种系统, 其处理正数和负数与处理无符号数字一样, 不需要增加硬件的复杂性。
      反码实际上从来没有在实时 DSP 或数字系统中使用过, 但是它能够引出标准形式的二进制补码的概念。

    1.2 二进制补码

      对于+0 和-0 来说, 更加合理的数字系统为只有一个 0 的二进制补码。 表 1.1 给出了二进制补码的表示。
      生成 0 的第 9 位可被忽略, 注意用二进制补码可以表示- 128,但不能表示+ 128。在对正值取反时, 会发现需要用第 9 位表示负零。 然而, 如果简单地忽略这个第 9 位 , 那么这个负零与正零的表示将完全相同。
    在这里插入图片描述

      注意在数值系统中, 每个位置上阶的意义。 例如对于十进制 156 来说:
    在这里插入图片描述
      也就是说字符串“156”代表数字 156,它是每个位置上的值与其阶的乘积的和。
      如表1.2 所示, 这个规则对二进制数也同样适用。 如表 1.3 所示, 对于二进制补码整数, 如果将最左列考虑为负值, 则结果同样适。
    在这里插入图片描述


    二、 非整数值的表示

      在数字信号处理系统中, 经常希望描述诸如正弦波的信号, 显然需要处理非整数数值的情况。 对这种非整数值要求的一种可能的解决办法是允许正弦波幅度按比例增加并以整数形式来表示。
      这种方法很常见, 但在某些情况下, 需要表示 0~1 之间的数值, 也需要表示整数之间的数值。用十进制表示小数很容易。 通过引入十进制小数点来描述非整数, 并在小数点的右边插人数字。 例如:
    在这里插入图片描述
    在式中, 字符串“10.34”代表数字 10. 34 ,即 10 的乘方的倍数的总和。
      同样地, 可以对二进制数执行同样的运算:

    在这里插入图片描述

    在式屮, 字符串“10.01”表示数字 2.25,即 2 的乘方的倍数的总和。

    2.1 定点二进制数

      定点数就是二进制小数点在固定位罝的数。 二进制小数点左边部分的位被定义为整数位, 而该点右边部分的位被定义成小数位。 举例来说: “101.01011”有 3 个整数位, 5个小数位。如表 2.1 所示, 定点数按类似的方式处理有符号整数。
    在这里插入图片描述

      根据表 2.1可得, 110.00111( 二进制数) = - 1.78125( 十进制数)
      如表 2.2所示 , 一种非常重要的定点数字类型只有一个整数位。
      例如, Motorola StarCore 和 TI C62x DSP 处理器都使用只有一个整数位的定点表示法。 这种格式可能是有问题的, 因为它不能表示+ 1.0,实际上, 任何定点格式都不能表示其负数最小值的相反数。
      所以在使用定点数时要多加注意。 一些 DSP 处理器结构允许利用扩展位对格式进行 1 个整数位的扩展( 这些扩展位就是附加的整数位)。
    在这里插入图片描述

    2.2 定点量化

      重新考虑数字的格式:aaa. bbbb 表示 3 个整数位, 5 个小数位。 可以表示- 4 和3.96785 之间的数, 数之间的步长为 0.03125。 由于具有 8 位, 故具有 28 = 256 个不同的值。 需要注意使用定点时的量化,将有± 1 /2LSB( 最低有效位) 的误差。
      量化就是使用有限数位来表示无限精度的数。 在十进制中, 很熟悉处理给定位数的十进制小数的方法。 实数可以表示为 3.14159265… , 可以量化或将其表述为带 4 个十进制位的小数 3.1416。 如果在这里使用舍人, 则误差为:

    3.14159265…- 3.1416 =- 0.00000735

      如果使用截断法( 即第 4 位小数以后的位数被扔掉) , 则误差将变得更大, 如下:

    3.14159265…- 3.1415 = 0.00009265

      很明显, 舍人是比较合适的能够得到预期精度的方法。 然而该方法也会有一些硬件开销。 尽管开销相对较小, 但它的确不是免费的。
      当乘以小数时需要处理到给定数目的位数。 例如, 如果需要计算两个十进制小数位, 则计算过程如下:

    0.57 X 0.43 = 0.2451

      可被舍人到 0.25,或者截断到 0.24。结果是不同的。
      一旦开始在数字信号处理系统中执行上亿次的乘加运算, 就不难发现这些微小的误差会因为累积而造成严重的影响。

    2.3归一化处理
      使川二进制小数使得算术运算变得容易, 也易于处理字长增长。 作为一个例子, 考这样一个“ 机器”, 它有 4 位十进制数和一个具有 4 个数字位的算术单元, 范围为-9999~+9999。 两个 4 位数相乘将导致多达 8 个有效数字。
    6787 X 4198 = 28491826 -->(标定)2849.1826–>(截断)2849
      如果想把这个数送到该机器的下一级( 算术运算具有 4 位的精度 ) , 那么需要按比例减小 10000 倍, 然后截断 。
      将其归一化到范围-0.9999 ~+0.9999。

    0.6787 X 0.4198 = 0.28491826 —>(截断) 0.2849

      现在截断到 4 位的操作变得相当容易。 当然两种结果是严格一致的, 而差别仅仅在于如何执行截断和标定。
      然而对输入执行归一化操作, 所有的输人值都位于-1~ + 1 的区间内。 可以注意到该区间内任意两个数的乘积同样存在于-1 +1 的区间之内。
      同样的归一化操作也适用于二进制, 而且大多数数字信号处理系统也使用二进制点。
      下面考虑 二 进 制 补 码 中 的 8 位 数 值。 因 此 该 数 值 的 取 值 范 围 是 10 0 0 0 0 0 0~01111111 (-128~+127)。
       如果将这些数归一化到-1~ 1 之间( 除以 128 ), 那么二进制的范围是 1.0000000~0.1111111( -1~ 0.9921875,其中 127/128= 0.9921875 )。 所以把十进制乘法中归一化的概念用于二进制。
      十进制乘法 36 X 97=3492 等价于二进制乘法 0010 0100 X 0110 0001 = 0000 1101 1010010。 在二进制中,将值归一化就是计算 0.0100100 X 0.1100001 =0.00110110100100。 等价于十进制中:

    0.28125 X 0.7578125=0.213134765625

      注意: 在 数 字 信 号 处 理 系 统 中, 在 设 计 者 的 眼 中, 二 进 制 点 是 存 在 的, 然 而 却 没 有 实际 的 连 接 或 连 线。 这 只 是 使 得 跟 踪 字 长 增 长, 以 及 通 过 扔 掉 小 数 位 来 截 断 变 得 更 加 容易。 当 然 如 果 更 愿 意 使 用 整 数 并 且 跟 踪 定 标 等 , 也 可 以 这 样 做。 得 到 的 答 案 是 相 同 的 ,硬 件 开 销 也 是 相 同 的。

    2.4 小数部分截断

      二进制中, 截断是简单地将位去除的过程。 通常使用这种强制的方法来将大的二进制字长变小, 通常需要截掉最低有效位 (LSB),该操作的影响是降低了准确度。
      考虑将十进制数 7.8 9 9 2 截 断 到 3 个 有 效 位 7.89。 当然, 可以截断最低有效位 , 其结果是损失了精度( 分辨率) , 但它仍是最初 5 位数的代表。 如果截断最高有效位 992 ( 或0.0992), 其结果将不是所希望的, 而且也失去了意义。
      在二进制中, 最髙有效位截断的概念是很少使用的, 在十进制的例子中, 最高有效位截断通常是灾难性的。 然而, 在某些极少情况下, 一系列的操作将导致整个数值的范围减小。 所以移除 MSB 也是有好处的。
      截断 MSB 通常发生在要截断的位为空的时候。 当使用有符号的值时, 由于丟失了符号位, 截断 MSB 将会带来问题。
      舍入是一种更准确的方法, 但同时也是更复杂的技术。 该技术需要进行一个加法操作, 然后再直接截断,该过程等价于十进制的四舍五人, 即通过在 7 . 8 9 上 加 0 . 0 5 然 后 再 截 断 到 7.9 来 舍人到一个小数位。 因此简单的舍人需要一个加法操作。

    2.5 一种不同的方法 Trounding

      Trounding 是截断 truncation )和 舍 人( rounding )之 间 的 一 种 折中方 法, 其 特 点如下。
      ① 和舍人一样, Trcnmding 保留了 LSB 以上的信息。
      ② 它和舍人不同, 它不影响新的 LSB 以上的任何位。
      其具体实现方法在 XtremDSP 中进行了详细的介绍, 具体可以参看这部分相关内容。 Trounding 的好处是它不需要全加器, 而且可以通过或门得到比截断更好的性能。尽管是一个很小的优点, 但这种成本上的节省以及性能的改善还是有价值的。


    三、 浮点数定义及表示

    3.1 标 准 浮 点 数 表 述

      浮点数可以在更大的动态范围内提供更高的分辨率, 通常当定点数由于受其精度和动态范围所限不能胜任时, 浮点数能提供解决方案。 当然, 也在速度和复杂度方面带来了损失 , 大多数的浮点数都遵循单精度或双精度的 IEEE 浮点标准。 标准浮点数字长由一个符号位 S,指数 e 和无符号( 小数) 的规格化尾数m构成, 其格式如下:

    在这里插入图片描述
      浮点数可以用下式描述:
    在这里插入图片描述
      指数 e=1…2 是为∞准备的。 而 e=0 是 为 0 预 备 的。 表 2.3 给 出 了 IEEE 的单精度和双精度格式的参数。
    在这里插入图片描述

      在浮点乘法中, 尾数部分可以像定点数一样相乘, 而把指数部分相加。 浮点数减法复杂一些,因为首先将尾数归一化, 就是将两个数都调整到较大的指数, 然后将两个尾数相加。 对于加法和乘法混合运算来说, 最终的归一化, 就是将结果尾数再统一乘小数1.m 形式的表达式, 这是非常必要的。
      一些浮点编码的范例 ( 单精度浮点 32 位, 注意这些运算都是基于二进制的计算)。如下:

    在这里插入图片描述

      注意小数点之前的 1 没有被编码( 那里一直有个 1, 因而不需要显式表示)。

    3.2 浮点数的短指数表示

      简化浮点硬件的一种方法是创建一种使用短指数的数据格式。 这种情况下有一个 4位的指数和一个 11 位的尾数。 因此可以表示-7~ 8 的范围内的指数。 其结果在动态范围内显著地增加, 代价只是精度轻微降低。 表 2.4 给出了定点数和短指数的比较。

    在这里插入图片描述

    3.3 浮点数的应用

      浮点在许多具有专用浮点单元( FPU ) 的 DSP 处理器中被广泛使用。 不在 FPGA中使用浮点的原因如下。
      ① 运算速度慢: FPU 是一个复杂的单元, 设计中的每个代数运算将共用该单元。
      ② 低效的芯片面积: 使用 FPGA 实现 FPU 需要很大的硬件空间。
      然而, 某些情况下 FPU 也许是必不可少的, 例如在需要一个巨大的动态范围的应用场合, 使用浮点可能使得设计更加简单 , 这是因为在定点设计中, 需要最好地利用可用的动态范围, 但是在浮点设计中, 动态范围的限制不是一个需要考虑的问题。

    OVER





    展开全文
  • 那么计算机内部是怎么样表示这些字符的呢?这个时候不用想,你满脑子都是电脑屏幕上的0 1 0 1吧。是的,没错,由于硬件的原因,计算机使用01来表示我们世界的字符。但字符的种类如此之多,这其中的范式又是什么呢...

    前言:

         我们所处的世界充满了各种各样的字符,我们使用它们,用自己定义的方式来表示,交流。那么计算机内部是怎么样表示这些字符的呢?这个时候你满脑子都是电脑屏幕上的0 1 0 1对吧。是的,没错,由于硬件的原因,计算机使用01来表示我们世界的字符。但字符的种类如此之多,这其中的范式又是什么呢?

         在我们走进01世界之前,我们先看看当下我们使用的字符编码,这其中不乏大家熟知的ascall码、utf-8等等。

    字符编码
    编码提出时间字符集大小解释
    ASCALL1961年128个字符(最初为8位,最高位为校验位)可以表示数字、英文字符和一些字符

    (ANSI)MBCS

    由于ASCALL字符有限,每个国家语言不同,所以对ASCALL进行扩充,产生MBCS对于不同国家来说,基本实现所有字符的覆盖不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码,又称为"MBCS(Muilti-Bytes Character Set,多字节字符集)

    GB2312

    是ANSI的一种,针对我们国家发布的,也叫国标码6763个常用汉字和682个全角的非汉字字符组成采用94行94列的区位码进行编码
    GBKGB 2312的出现,基本满足了汉字的计算机处理需要,但对于人名、古汉语等方面出现的罕用字,GB 2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。总计23940 个码位,共收入21886个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号883 个有些汉字用五笔和拼音都打不出来,如:溙(五笔IDWI),须调出GBK字符集才能打出这个字

    Big5

    为统一繁体字符集编码,1984年,台湾五大厂商宏碁、神通、佳佳、零壹以及大众一同制定了一种繁体中文编码方案,因其来源被称为五大码,英文写作Big5,后来按英文翻译回汉字后,普遍被称为大五码

    大五码是一种繁体中文汉字字符集,其中繁体汉字13053个,808个标点符号、希腊字母及特殊符号

    目前,Big5编码在台湾、香港、澳门及其他海外华人中普遍使用,成为了繁体中文编码的事实标准。

    Unicode

    世界上存在着多种编码
    方式,在ANSi编码下,同一个编码值,在不同的编码体系里代表着不同的。为了统一就诞生了Unicode
    Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号Unicode固然统一了编码方式,但是它的效率不高,比如UCS-4(Unicode的标准之一)规定用4个字节存储一个符号,那么每个英文字母前都必然有三个字节是0,这对存储和传输来说都很耗资源。
    UTF-8为了提高Unicode的编码效率,于是就出现了UTF-8编码。UTF-8可以根据不同的符号自动选择编码的长短。比如英文字母可以只用1个字节就够了。和Unicode一样字符集

    对Unicode的优化,可以包含世界上所有字符,字母占1个字节,汉字占3个字节;

    UTF-8 是在互联网上使用最广的一种 Unicode 的实现方式。

    UTF-8 是一种变长的编码方式。它可以使用 1-6 个字节表示一个符号,根据不同的符号而变化字节长度

    Base64

    有的电子邮件系统(比如国外信箱)不支持非英文字母(比如汉字)传输。
    这是历史原因造成的,因为一个英文字母使用ASCII编码来存储,占存储器的1个字节(8位),实际上只用了7位2进制来存储,第一位并没有使用,设置为0,所以,这样的系统认为凡是第一位是1的字节都是错误的。而有的编码方案(比如GB2312)不但使用多个字节编码一个字符,并且第一位经常是1,于是邮件系统就把1换成0,这样收到邮件的人就会发现邮件乱码。
    英文中文字符都可以为了能让邮件系统正常的收发信件,就需要把由其他编码存储的符号转换成ASCII码来传输。比如,在一端发送GB2312编码->根据Base64规则->转换成ASCII码,接收端收到ASCII码->根据Base64规则->还原到GB2312编码

         这些编码集都是外面平时使用的,不信你可以打开记事本,点击另存为的时候就可以选择字符集,当然就有上面我们提到的ANSI。而我们做javaee或者网页的时候,大都也采用utf-8,看了上面的介绍我们心里应该大致知道是为什么了吧。所以,乱码并不可怕,只要编码和解码的字符集一致就好,绝对不会出问题。

     

    一、思维导图

         我们可以看看关于我们世界所使用的文字的思维导入,接下来所展示的数字和文字表示方式会根据这个来进行。

     

    二、谈谈数据的表示方式

         大部人是知道计算机内部以01来存储我们的数据,也知道进制的转换,这里就根据上面的思维导图来简单说说我们的数据表示吧。

    (1)数值类型

         首先,大家最新认识的当然是十进制的数据(在没有学计算机之前,其它的进制数大都是在初高中数学里面知道的,但都不熟悉)。对于十进制数,我们在熟悉不过了,我们可以用二进制,八进制,十六进制来表示。例如十进制27就可以表示为十六进制的1B,二进制的0001 1010。那么聪明的你可能会问我,负数是怎么表示的呀?当然,我们用十进制是很好表示负数的,但是对计算机来说,却是一件头疼的事情。所以CS(Computer scientist)们就想出将二进制能够表示的数用一半的数表示正数,另一半的数表示负数的形式。例如8位二进制数,0~127这128个数字就表示正数,而128~255这128个数字就表示负数,但是约定它们表示-128~-1。所以就有了课堂上老师说计算机内部拥有符号位的说法,其本质就是这个。如果想要了解更过关于二进制补码的,可以跳转到我这篇博客:进制转换小技巧之让你重新认识二进制补码(大师,我悟了)!!!。所以对于数值我们就说清楚了对吧。

         当然没有啦,因为我们小学所学的,除了整数,还有小数呢,这里小数又分为定点数和浮点数。但是你会问我,什么?小学不就是小数吗?上面的定点数和浮点数当然是我们计算机有关的定义啦。所谓的定点数就是约定机器中所有数据的小数点位置是固定不变的。由于约定在固定位置,小数点就不再使用记号“.”来表示了。所以定点数就是我们上面所说的纯整数还有纯小数。我们只需要最高位表示符号位,后面为尾数即可。

         如果数X表示的是纯小数,那么小数点位于Xn和Xn-1之间;如果数X表示的是纯整数,那么小数点位于最低位X0的右边。

    --------->

         对于浮点数来说:把数的范围和精度分别表示的方法,相当于数的小数点位置随比例因子的不同而在一定范围内可以自由浮动,所以称为浮点数表示法。

         任意的一个十进制数N可以写成N = 10^E.M;同样,任意二进制N可以写成N = 2^e.M。其中M称为浮点数的尾数,是一个纯小数。e是比例因子,称为指数,表示为整数,也称为阶码。而阶符合数符当然就是符号位啦。所以我们现在已经知道了定点数和浮点数在机器内的表达方式了。那么我们小时候所学的也并非只有数学,还有语文,还有各种各样的符号,它们是怎么在计算机中表示呢?

    (2)字符和字符串

         对于我们所学的ABCD,显然需要另一种方式来表达,于是我们就有了ASCALL码,美国人将英语字符和其它符号专门定义了一个统一的标准,用专门的数字对应符号,例如a的ASCALL码就是97,它对应的大写的A的ascall码就是65,为什么我会知道,你可能相差32,那是因为在二进制表达的时候大小写的差值就在于第5位二进制的符号相异。而表示字符串,我们既可以用ascall码,也可以用我们可以理解的方法(但这些方法大都不实用,因为计算机内部无法表示)。

         由于ascall码能够表示的字符有限,所以后来我们就有了Unicode,万国码,超级齐全,之后的utf-8和utf-16也是以此为基准在计算机内部表示。

     

    三、谈谈汉字的表示方式

         那我们国家的汉字如何表示存储的呢?

         存储汉字有很多种方法对吧,我们国家采用的数字编码其实就是国标区位码,也就是将国家标准局公布的6763个两级汉字分为94个区,每个区分94位,实际上就是一个二维的表格。例如“中”字就是第54区48位,区位码为5448。而它的机器内吗无非就是将5448转换为进制数(因为这里的5448是十进制数)。例如我们转换为16进制数为36 30,注意,这里54 48是两个数字,所以转换是分别转换。然后将它加上A0A0H,就得到它的机器内码的表示:D6D0。也就是说:汉字内码 = 区位码 + 0XA0X0H。

         为什么是这样呢?那是因为,一个汉字要两个字节,为了让计算机识别出左边和右边一同联合表示一个汉字,最高位就为1,所以我们这么加也就是让最高位都为1啦。

     

    四、展望:有没有更好的表示呢?

         现在几乎所有的人类语言和字符都可以用计算机来表示了,我们做项目一件很重要的事情也就是统一字符编码,让编码和解码的字符一致,才不会出现乱码的情况。当然最常用的也就是utf-8啦。那么有没有比这更好更快的表达呢?让计算机更加的便捷呢?就看你们啦~

    展开全文
  • 有符号表示法、加减法、补码摘要:本文将会说明有符号表示方法,有符号正负数之间的跳变,有符号负数的加减法,为什么采用补码等方面进行分析。我是学过计算机原理的,也有有符号和无符号的概念,以及...

    有符号数的表示法、加减法、补码

    摘要:本文将会说明有符号数的表示方法,有符号数正负数之间的跳变,有符号负数的加减法,为什么采用补码等方面进行分析。

    我是学过计算机原理的,也有有符号数和无符号数的概念,以及正码、反码、补码的概念。可是我今天在看C++primer

    plus时仍然对讲解的有符号数之间的跳变搞蒙了。原因是我只是有了概念,当初学习没有深入的去问为什么计算机会这么处理有符号的数据。那么好吧,现在就得补回来。

    有符号数

    有符号数的概念当然就是,用一个比特表示正负了,很明显是这样,比如:+8为00001000,-8就是10001000(这里呢就用8位的长度表示数值),可见在+8和-8的二进制有符号表示的时候差别就在首位字节,就是第一个比特了。这就是有符号数。

    为什么要用有符号数?

    我想应该是数学逻辑中就是有正负的,而计算机作为数据处理的工具当然要可以表示数据的正负,所以这是很显然的事情。

    有符号数带来的问题

    正负的表示问题我们是解决了,可是光表示了是不行的,我们的目的还是用来运算的。那么问题来了。

    引入了一个符号位,其表示数值的范围是多少?

    8位的数据的二进制范围是,00000000-11111111,即十进制的0-255,。有符号数的首位可是有含义的,所以二进制仍然是00000000-11111111,但是十进制的范围就成了,-128-+127,就是-128到+127,然而这是有问题的,什么问题?有没有想过0该这么表示,10000000(-0)还是00000000(+0)。这的确是个问题,如果有了正负0那么取值的范围很明显就是-127到+127了嘛,中间有两个正负0。当然严谨的计算机科学家是不允许的,所以只能有一个表示十进制的0,那就是00000000,可是10000000表示个啥?规定表示为-128,这样就解决了两个0的问题,而且取值的范围就是-128到+127。

    有符号数之间的跳变?

    什么事跳变,其实就是溢出,什么又是溢出,其实就是数值的超出了范围。举个例子,8位有符号数范围我们是知道了就是-128到+127,但是当我超出了+127时会怎样?看一下

    +127

    + 1

    ------

    =+128

    十进制来看是这样的,但是+128已经超出了表示的范围了。那么跳变就出现了。通过二进制看一下

    01111111(+127)

    +00000001( +1)

    ----------------

    =10000000(-128)

    二进制相加的结果是10000000,从前面的定义我们知道它是-128。这就是溢出了,发生了跳变。在工程中我们一定要避免这种事情的,因为它不是我们期望的数值。所以搞清楚每个类型的取值的范围是必要的。

    这种跳变我不知道工程中会不会用到,但是我是不想用到的,因为不符合常规逻辑。

    有符号数的加法

    前面也用到了有符号数的加法,在正数时,不超过+127范围时还是正常的,该是几就是几。超出就是负数了,那么我们讨论一下负数的加法。

    先说-128吧。

    (-128)

    + (+1)

    ---------

    =-127

    没毛病,十进制是这样的。二进制又是这么样的?

    10000000(-128)

    +00000001 (+1)

    ----------------

    =10000001(-1)

    以下是重点

    结果怎么是这样呢?怎么会是-1而不是-127呢?跟我想的不一样,很不开心。可是不开心是没有用的,我们仍然要解决问题。怎么解决?

    1、改变加法器。因为正数的加法器不适用于负数的加法运算。这是一个方案,可是这会导致正数和负数用了两个加法器,如果硬件做加法,那就会增加电路负担,有没有可以通过软件解决的?

    2、改变表示方式。什么意思?就是说-128在计算机中并不是用10000000存储,而是其他的,怎么表示呢?把负数表示成什么0减去一个正数?试试看

    -128为0-128,100000000(9位,理解为向第9位借了一位1)-10000000=11111111+00000001-10000000=100000000

    -127为0-127,100000000(9位,理解为向第9位借了一位1)-01111111,即11111111+00000001-01111111=10000001

    这样看起来真是是对的了!这样为什么是可以的?

    1、两边是恒等式,因为两边都有向第9位借了1位,其实就是两边都加了一个数。即,

    -128+1=-127可以表示为(256-128)+1=(256-127),二进制表示为

    [(11111111+00000001)-10000000]+00000001=[(11111111+00000001)-01111111]=10000001。

    2、这样做其实是把有符号数转变成了无符号数的运算,即把-128转换为了无符号数10000000,注意这里其实并不是-128。我想表达的意思是在运算的时候不要把首位比特当做字符了。其实在转换的时候用到减法运算,这样的目的呢就是在数值上不区分正负,而在转换的运算符中考虑了。所以会是这样。

    其实这个转换呢就是补码,这是我参考了别的博文,自己理解的补码的由来,很多教科书都会将到补码的计算公式,然而却并不去讲这个的由来,大多数学生也都是选择了死记硬背,先记住再说,然后就没有再说了,这样真的不好。

    参考文献:

    展开全文
  • 展开全部这是大地坐标系的定位,...例如X=383576.912,表示该点在离全球共同的基准点纬线方向距离383576米又912毫米的线上。平面上一点的位置可以用互相垂直的两条线的交点来确定,所以还应该有个Y值。扩展资料:...
  • 数据是用二进制数表示

    千次阅读 2021-05-22 06:50:10
    数据是用二进制数表示的[TOC]32位是几个字节?4因为8位 = 1字节, 所以 32位就是 32 ÷ 8 = 4 字节二进制01011100转换成十进制是多少?将二进制的各位的值和位权相乘后再相加, 即可转换成为十进制.92二进制...
  • 自学提示 1.如何确定位置 提示在确定张亮位置时用到了几个数分别表示什么意思 2.你是怎样理解数对的 3王艳同学的位置用数对表示是 赵雪同学的位置用数对表示是 看一看有什么不同? 找准位置很简单 竖列
  • 计算机组成原理--表示及计算

    千次阅读 多人点赞 2020-08-23 23:04:35
    定点表示和运算3.浮点数的表示和运算4.算术逻辑单元(ALU)二、数制与编码1.进制及其转换:1.非十进制转换成十进制2.十进制转换成非十进制3. 八进制、二进制互转3. 十六进制、二进制互转2.真值和...
  • 本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算...一个在计算机中的二进制表示形式, 叫做这个的机器。机器是...
  • 计算机中定点数表示方法——补码

    千次阅读 2020-02-27 10:45:53
    (1)模的概念 假设两位十进制计算: • 77 — 38 = ? • 77 + 62 = 139 77 — 38 = 77 + 62 = 39 (mod 100) 由此可以看出,减38和加62是等价的,前提是说模为100是...当运算结果超出实际的最大表示范围,就会发...
  • c语言中float是如何表示

    千次阅读 2021-05-21 04:40:55
    《c语言中float是如何表示的》由会员分享,可在线阅读,更多相关《c语言中float是如何表示的(6页珍藏版)》请在技术文库上搜索。1、c语言中 FLOAT 是如何表示的 默认分类 2009-10-03 15:21 阅读 56 评论 0 在 C+里,...
  • 计算机中信息的表示

    千次阅读 2021-07-27 03:54:06
    计算机中信息的表示1.3.1 数制1、数制的基本概念及常用数制什么是数制?简单地说,数制就是用一...各种数制有一个共同的特点,即在一个中,同一个数码处于不同位置则表示不同的值。我们把基数的某次幂称为位权。计...
  • python怎么输入数字

    千次阅读 2020-11-21 02:56:33
    在编程中,经常使用数字来记录游戏得分、表示可视化数据、存储Web应用信息等。Python根据数字的用法以不同的方式处理它们。鉴于整数使用起来最简单,下面就先来看看 Python是如何管理它们的。 今天我们来学习如何在...
  • 在计算机系统中,数值一律用补码来表示和存储。 原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。...一个在计算机中的二进制表示形式, 叫做这个的机器。机...
  • python怎样求10个的平均

    千次阅读 2021-04-27 05:39:23
    python怎样求10个的平均发布时间:2021-03-12 09:18:47来源:亿速云阅读:100作者:小新这篇文章主要介绍了python怎样求10个的平均,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后...
  • IC有几种不同的形状,有的像一条黑色蜈蚣,在其两侧有数个乃至百个引脚;有的则像插花用的针盘,引脚在IC内部并排排列着。IC的所有引脚,只有直流电压0V或5V②两个状态。也就是说,IC的一个引脚,只能表示两个状态...
  • 计算机中的符号位 ...在计算机内部用 补码 表示有符号 正数的补码为正数本身 负数的补码为负数的绝对值各位取反后加一 实例 :负数-8在计算机内部的表示(推演) 输出 : 推演 : 原: -...
  • 机器表示形式

    千次阅读 2012-09-30 18:28:51
    最近在学习 微机原理 , 被弄得是焦头烂额 。这个东西讲起来太抽象,不好理解 老师讲的也听的是一塌糊涂 ... 8位二进制 ,最高位表示的符号 ,其中 o 代表的是整数 ,1 代表的是负数 。如 : 1000 1111 和 0000
  • 很好地在python中表示浮点数

    千次阅读 2021-03-17 18:49:46
    我想将浮点数表示为四舍五入到一定位数的字符串,并且从不使用指数格式。 本质上,我想显示任何浮点数并确保它看起来不错。这个问题有几个部分:我需要能够指定有效位数。有效位数需要是可变的,不能是用字符串格式...
  • 浮点数表示

    万次阅读 多人点赞 2016-12-22 15:00:17
    浮点数表示 浮点数的规格化表示 浮点数的表示范围 浮点数的表示精度 参考资料 之前的一些工作当中碰到了很多有关浮点数的问题,比如浮点数的表达范围、表达精度、浮点数的存储方式、浮点数的强制类型转换...
  • 计算机中的分数如何表示

    千次阅读 2021-06-16 04:15:30
    正如您可能熟悉的那样,整数通常用硬件位来表示,以表示二进制数字,因此物理属性(例如电荷或缺少电荷,高电压或低电压,单向或双向磁场)用于代表比特(0和1),并且这些比特序列使得一个数字(如11010),这是我们在二...
  • 补码表示

    千次阅读 2021-04-04 12:19:06
    一个正数,按照绝对值大小转换成的二进制;一个负数按照绝对值大小转换成的二进制,然后最高位补1,称为原码。 比如 00000000 00000000 00000000 00000101 是 5的 原码。 10000000 00000000 00000000 00000101 ...
  • C语言程式设计中的平方立方怎么表示直接用两个(或变数)相乘就是了,比如x*x另外C语言中,math.h档案中含有乘方(包括开方)的库函式,是pow(x,y)其中x和y都是双精度浮点(double)型,x是底数,y是指数(如果是小数即为...
  • 稀疏表示

    千次阅读 2018-12-28 20:34:00
     信号的稀疏表示并不是新的东西。我们很早就一直在利用这一特性。例如,最简单的JPEG图像压缩算法。原始的图像信号经过DCT变换之后,只有极少数元素是非零的,而大部分元素都等于零或者说接近于零。这就是信号的...
  • 计算机中整数的表示

    千次阅读 2020-07-21 09:27:43
    字节 最小值 最大值 [signed] char 1 -128 127 unsigned char 1 0 255 short 2 -32768 32767 unsigned short 2 0 65535 int 4 -21 4748 3648 21 4748 3648 unsigned 4 0 42 9496 7295 long 8 -922...
  • 假设那么为x,不知道是多少位的.你可以使用下面的表达式:个位:x%10;十位:x/10%10;百位:x/100%10;千位:x/1000%10。C语言有以下几种取整方法:1、直接赋值给整数变量。如:int i = 2.5; 或 i = (int) 2.5;这种...
  • python中二维数组中的如何表达

    千次阅读 2020-12-22 06:50:47
    python二维数组如何挑选出一定范围的数值?比如说有一个二维数组 13.1 13.2 13.3 13.4 15.5 ...Python中怎么获取二维数组中指定列的数据。Python中怎么获取二维数组中指定列的数据?是不是还在熬夜还再看他空间还再...
  • 浮点数表示方法

    万次阅读 多人点赞 2018-12-11 21:01:06
    浮点数是一种 公式化 的表达方式,用来近似表示实数,并且可以在表达范围和表示精度之间进行权衡(因此被称为浮点数)。 浮点数通常被表示为: N=M×R^E 比如: 12.345=1.2345×10^1 其中,...
  • 浮点数表示总结

    千次阅读 2018-09-18 18:32:26
    早期的计算机使用定点表示实数,由于定点的小数点位置固定,而计算机字长有限,定点无法表示很大和很小的实数,因此而在计算机科学中有了对于实数近似值数值的表示法——浮点数。这种表示法类似于十进制中的...
  • 以下是所有的源代码:#include //判断一个是否为素数的函数定义int is_prime(int n){//判断n是否小于2.若小于则直接返回0//表示n不是一个素数if(n < 2)return 0;//定义一个中间变量i,初始化i=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 391,577
精华内容 156,630
关键字:

怎样表示数对