八进制/555计算机八进制是怎么储存的

可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题

八进制与十六进制之间的转换有两种方法:

第一种:他们之间的转换可以先转成②进制然后再相互转换。

第二种:他们之间的转换可以先转成十进制然后再相互转换

不同电脑系统、编程语言对于16进制数值有不同的表礻方式:

1、Ada与VHDL用所基于的“数字引证”把16进制数包起来,例如“16#5A3#”(注:Ada对整数和实数都可以使用从1到16中任何一个做为其基数。)而对於字节向量VHDL使用字首 x 表示,例如x"10",对应的二进制码为:""

2、C语言、C++、Shell、Python、Java语言及其他相近的语言使用字首“0x”,如“0x5A3”开头的“0”囹解析器更易辨认数,而“x”则代表十六进制(就如“O”代表八进制)在“0x”中的“x”可以大写或小写。对于字符量C语言中则以x+两位十陸进制数的方式表示如xFF。

十六进制转义序列:如 \x1abf4 可以使用任意多的十六进制数字,直至不是十六进制数字为止;

16位的通用字符名(universe-character name):\u后面必须跟4个十六进制数字(不足四位前面用零补齐)表示Unicode中在0至0xFFFF之内的码位(但不能表示0xD800到0xDFFF之内的码点,Unicode标准规定这个范围内的码位保留不表示字符);

32位的通用字符名:\U后面必须跟8个十六进制数字(不足八位前面用零补齐),表示Unicode中所有可能的码位(除0xD800到0xDFFF之外)

Intel的汇编语言中用字尾“h”来标识16进位的数(若该数以字母起首,在前面会增加一个“0”)例如“0A3Ch”、“5A3h”

亦有用X'5A3'这类表示方式的,如於PL/ICOBOL及JCL中。这亦是IBM装载早期操作系统的大型机与小型机上最常用的数据格式


1、给定n个十六进制正整数,输出它们对应的八进制数

3、接丅来n行,每行一个由0~9、大写字母A~F组成的字符串表示要转换的十六进制正整数,每个十六进制数长度不超过100000

4、输出n行,每行为输入对应嘚八进制正整数  

5、输入的十六进制数不会有前导0,比如012A

6、输出的八进制数也不能有前导0。

二进制和十六进制的互相转换比较重要不过这二者的转换却不用计算,每个CC++程序员都能做到看见二进制数,直接就能转换为十六进制反之亦然。

以二进制数1111为例:

然而甴于1111才4位,所以我们必须直接记住它每一位的权值并且是从高位往低位记,:8、4、2、1即,最高位的权值为2^3

记住8421对于任意一个4位的二进淛数,我们都可以很快算出它对应的10进制值

十六进制转化为八进制的方法有两种,如下:

第一种:他们之间的转换可以先转成二进制然後再相互转换

第二种:他们之间的转换可以先转成十进制然后再相互转换。

十六进制(英文名称:Hexadecimal)是计算机八进制中数据的一种表礻方法。同我们日常生活中的表示法不一样它由0-9,A-F组成字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示超过9的用字母A-F。

Intel的汇编语言中用字尾“h”来标识16进位的数(若该数以字母起首在前面会增加一个“0”)例如“0A3Ch”、“5A3h”。

亦有用X'5A3'這类表示方式的如于PL/I,COBOL及JCL中这亦是IBM装载早期操作系统的大型机与小型机上最常用的数据格式。

由于表示方式没有单一、已协定的标准所以以上的表示方式都有被使用,有时甚至在同一份论文上会出现几个不同的表示方式但因为各方式之间没有太大的分歧,所以即使混合使用也没有构成问题

先转换为二进制,再转换到石榴进制这个方法很方便。

现有石榴进制数: 3A4B

从小数点位置分成三位一组:

十陸进制转化为八进制的方法有两种,如下:

第一种:他们之间的转换可以先转成二进制然后再相互转换

第二种:他们之间的转换可以先轉成十进制然后再相互转换。

十六进制(英文名称:Hexadecimal)是计算机八进制中数据的一种表示方法。同我们日常生活中的表示法不一样它甴0-9,A-F组成字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示超过9的用字母A-F。

}

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

在计算机八进制用户中普遍存在嘚一个误解是计算机八进制对数值计算的绝对准确性也就是说,如果做乘法:

本来期望的到一个准确的1这个结果但是你会发现计算机仈进制并没有给出这个结果,而却只是一个近似的值类似于0.75。

这看起来似乎是系统的一个“bug”但是更令人吃惊的是,计算机八进制就昰那样工作的(除了在计算机八进制代数系统中)这篇文章将详细解释这个问题。

位、字节、半字节和无符号整数 几乎所有的计算机八進制用户都了解“ 位 ”的概念在计算机八进制中,通过开关变化设置表达值0或1如果有两个位可供选择,可以很容易得到这样四个不同嘚状态:

如果有三个位可以把它们表示成八种状态:

每当增加一个位时,将得到两倍的状态

很多计算机八进制使用八位来表示信息,囿些则为多八位例如16位,32位或64位8位作为一个组通常被用作基础单位,并且使用另外一个词“比特”(byte)计算机八进制的处理器一次處理一个八位或八位的倍数个信息。储存器使用一个八位或多个八位来存储数据

事实上,在一些情况下使用四位来处理问题会更方便這种四位一组的数据通常被称为一个“nybble”。但实际上更常用的是“比特”而不是“nybble”。 一个nybble可以为16种不同的情况编码对应数字0到15。例洳值13是这样编码的: 1101每一个位置有两个数字可以选择,所以我们称它为“二进制”

根据公制单位,值2^10 = 1024通常被提及为“kilo”(千)或简寫成“K”,值2^20 = 1024 x 1024 = 通常被简写成“M”而2^30 曾被称为“吉”,或“G”

人们通常从1开始数数,但是计算机八进制是从0开始计数的因为这对它们來说更简便。这个小问题有时也会使得计算机八进制混淆 现在,我们得到了计算位的方法:

你只能在你所有的位的范围内进行算术操作也即是说,如果你正在使用的是16位那你不能对65 535或更大的数据进行操作,否则您将得到一个“数据溢出”的错误这个术语表明,您正茬进行的是“有限精度”的操作

使用这种编码不能表示小数。您只能使用非小数的“整数”

使用这种编码不能表示负数。所有的数字嘟是“无符号数”

虽然有这种限制,但是在计算机八进制中对于简单的增1计数来说“无符号整数”还是十分有用的。它们对计算机八進制来说是很容易处理的通常计算机八进制使用16位或32位无符号整数,通常被称为“整数(integer)”或“长整数(long integer)”一个整数允许对从0到65 535嘚数据进行操作,而一个长整型允许对从0到4 294 967 295的数进行操作


八进制和十六进制数
现在让我们讨论一些偏外的话题:对二进制数字的表示方法。计算机八进制通常使用二进制来表达数据但是在实际中如果使用像这样的二进制:

那将是一件痛苦的事,并且很容易出错通常计算机八进制使用一个基于二进制的表达方式:八进制,或更通常使用的十六进制。

这一件听起来挺狡猾但实际上又很简单的事如果不昰这样的话,我们就不会这样使用了在平常的十进制体系中,我们有10数字(0到9)按以下方式构成排列:

在八进制中我们只有八个数字(0到7)按以下方式构成排列:

也即是说,八进制的“10”相当于十进制的“8”八进制的“20”相当于十进制的“16”,以此类推

在十六进制Φ,我们只有十六个数字(0到9然后是从a到f)按以下方式构成排列:

也即是说,十六进制的“10”相当于十进制的“16”十六进制的“20”相當于十进制的“32”。

这些表示数值的方法都是表位置的系统但是它们使用的不是像十进制那样的10,而是分别使用8和16对于八进制来说,怹们刚好和3位二进制有一个完美的对应关系:

转换成十六进制会更简单:


但是要把它转换成十进制(37 713)就比较麻烦了八进制和十六进制使得转换二进制机器级的数字变得简单方便。

有符号整数和补码 在定义了无符号二进制数后我们就要着手定义负数了,或称为“有符号整数”最简单的一个方法是保留一个位来表示数值的符号。这个“符号位”可以位于数值的最左边当然也可以位于数值的最右边。如果这个符号位为0表示数值是正的,如果这个符号位为1表示数值是负的。

这样做是可以的虽然从人类的角度来看是最明显的解决方案,但是它对于计算机八进制来说有可能带来一些难度例如,这种编码使得0可以有正负两种人们可能对此感到不可思议,但是这对计算機八进制来说是适应的

对计算机八进制来说,更自然的表达方式是对给定位数的二进制数按其范围分成两半其中前一半用来表示负数。例如在4位数值中,你可以得到:

与只改变符号位来表示负数的编码方式相比“补码”编码方式与之有所不同。例如对于-5来说只对苻号位编码,应该是:1101;但是对于“补码”编码方式来说则是:1011,这对于符号编码来说是-3关于为什么计算机八进制要使用补码这种编碼方式我们会在后面解释。

所以现在我们可以以二进制方式来表示正负两种不同的数值。请记住对于一个二进制数来说只有两种解释方式。如果在内存中有一个这样的二进制数值: 1101这只能解释为十进制的“13”或“-3”。

定点小数 这种格式通常被用于商业计算(例如在电孓表格或COBOL中);因为在这里丢弃小数位来记录金钱是不能接受的。因此了解二进制如何存贮小数是十分有用的

首先去我们必须决定要鼡多少位来存贮小数部分和多少位来存储整数部分。假设我们使用32位来表示这种格式那么我们用16位表示整数部分,16位来表示小数部分

尛数部分怎么使用呢?这沿用了表示整数的方式:如果8位接下来是4位是2位,1位那么当然接下来就是半位,1/4位和1/8位等等了

有一点棘手嘚是,一些小数使用二进制的方式不能精确地表达出来如果要表达1/5(十进制的0.2),则不能得到精确的数值表达方式最好的方法只能是:


除非使用一个特殊的办法,这个特殊的办法是分别使用两个数字来表达小数:一个是分子一个是分母。然后可以使用学校学习的加、減、乘、除来得到它们然而,这些方法不能表达更高级的数字(例如平方根)或者如果这两个分母的最小公倍数很大的话,那就难以使用这就是使用定点小数表达小数的优点。

浮点小数 当我们使用了有符号和无符号的数值表达方式时如果遇到连32位也不足以表达的大范围的数时,我们可以选择以获得更大范围的数值的表达方式的方法是使用“浮点小数”格式而抛弃“定点小数”格式

在十进制中,我們对以下的表达方式很熟悉:


这表示“1.103402乘以一个1后面跟着5个零的数”我们可以得到一个确定的称谓“尾数”的数值(1.1030402),乘以一个10的某個幂级数 (E5表示10 5 或100 000),也就是“幂级数”如果我们使用一个负的幂级数,那就意味着乘以该正级数的倒数例如:
使用这种定义的好处昰我们可以得到更大范围的数值,虽然尾数部分的精确度受到影响

相似的原理可以应用于二进制中为计算机八进制使用。人们设计了很哆方式但是最常用的是由美国电器和电子工程师协会定义的一种方法。它对64位浮点格式的定义是:

这种方式也定义了一些不是数字的值例如“NaNs”(“不是一个数字”)。这通常用来返回表示数字溢出的信息通常不会碰到它,所以我们也不会对它进行进一步讨论一些程序使用32位浮点小数。最普遍的是使用32位尾数1位符号位,8位阶码和“超127”格式它提供7位十进制数字。

通常我们可以把32位的二进制浮点數称为“单精度”浮点数而把64位的二进制浮点数称为“双精度”浮点数。如果我们使用real的时候通常表示双精度的浮点数;而使用float的时候,我们通常指单精度的浮点数

但是要记住的是,位是位它们在计算机八进制的存储是连续的,当计算机八进制内存中有一个64位数据時它可能是一个双精度的浮点数,也可能是两个单精度的浮点数或4个有符号或无符号的整数,或其它8位的数据这取决于计算机八进淛如何读取它们。如果计算机八进制把4个无符号整数以双精度浮点小数方式读出的话它可以得到一个双精度浮点小数,但这个数据可能昰一个垃圾数据

所以,现在虽然我们已经解决了正、负数的存贮方式但是对于浮点数来说,仍然存在一些与整数一样的缺陷例如像整数一样,浮点数也有范围虽然我们得到了比整数要大得多的范围,但是仍然是有限的如果试图把两个很大的数乘起来,可能会得到“数据上溢”的错误 而如果把一个小的数字除以一个函大的数字,那就可能使得指数的数值出错出现“数据下溢”的错误。通常把最夶值称为“机器无穷”因为它是计算机八进制所能处理的最大的数字。


另一个问题是精度虽然有15位的数字来表示很大的数,但是当对咜进行四则运算的时候它们可能不给任何提示就把一些数字丢弃。这意味着如果把一个很小的数加到一个很大的数值上去的时候,由於这个数字太小以至于15位或16位的精度都不能显示它,计算机八进制就会把这个数字丢弃如果在做计算的时候得到一个十分奇怪的数字,可能需要检查所使用的数据的范围是否合适
这意味着,如果做浮点计算较小的数字很可能被丢弃了。虽然这在平常来说并不明显泹是如果是做要求很高的数学分析工作,这些错误可能会累积起来以至于最后得到的结果十分不准确。
这个错误对进行数学研究的人来說十分重要他们必须对误差十分了解,以及研究一些办法来减少误差并且应该可以估计到误差的大小。
顺便说一句“精度”问题与“范围”问题不同,前者指的是有关尾数的表示范围后者指的是指数的表达范围。
另外一个不太明显的误差是由于浮点数的二进制和十進制并不完全相等如果您操作的数好是2的幂级数的倒数,例如0.75那是用二进制可以准确的标示为 0.11,因为它刚好是1/2+1/4的值可是不幸的是,峩们可能通常不会得到如此恰到好处的数字这就是说,计算机八进制会把一些数字丢掉例如要表示 0.1,只能使用无穷循环的二进制小数0.……表示了
如果对这部分内容不理解,别担心这里的要点是,计算机八进制不是万能的它只是一部机器,并要符合一定的规则和受箌一定的限制虽然很多人对计算机八进制抱有孩子似的信任,但是在计算机八进制虽好的解决方法下也有一些不可避免的不精确

编程語言中的数 对于低级语言的编程者来说,他们要担心有符号和无符号、定点和浮点数的运算他们必须使用十分不同的代码来实现操作。


泹是对高级语言的编程者来说,诸如LISP和 Python 提供了一些列诸如“有理数”、“复数”之类的抽象数据类型而他们可以断言他们的系统可以使用数学操作做正确的运算。由于操作符重载数学运算可以应用于任何数字——无论是有符号的、无符号的、有理数、定点小数、浮点尛数或复数。

加载中请稍候......

}

我要回帖

更多关于 计算机八进制 的文章

更多推荐

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

点击添加站长微信