简介
在计算机中,机器字长是指CPU进行一次整数运算所能处理的二进制数据的位数(整数运算即定点整数运算)。1多字二进制数据是指一般不少于3个机器字的二进制数据。例如计算机进行双精度浮点数运算时,双精度浮点数一般都是多字数据,所以CPU处理的是多字二进制数据,CPU要多次处理才能运算完一个双精度浮点数运算。在图像、音频等领域进行数据处理会经常出现。
多字节二进制数据是指一般不少于3个字节的二进制数据。字节(Byte /bait/ n. [C])是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。字通常通常分为若干个字节(每个字节一般是8位)。多字二进制数据与多字节二进制数据一般是不相同,当且仅当字长和字节相等。
数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。
变量是用来存储值的所在处,它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明变量时也可指定它的数据类型。所有变量都具有数据类型,以决定能够存储哪种数据。
数据类型包括原始类型、多元组、记录单元、代数数据类型、抽象数据类型、参考类型以及函数类型。
二进制在数学和数字电路中,二进制(binary)数是指用二进制记数系统,即以2为基数的记数系统表示的数字。这一系统中,数通常用两个不同的符号0(代表零)和1(代表一)来表示。以2为基数代表系统是二进位制的。数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。每个数字称为一个位元(二进制位)或比特(Bit,Binary digit的缩写)。
现代的二进制记数系统由戈特弗里德·莱布尼茨于1679年设计,在他1703年发表的文章《论只使用符号0和1的二进制算术,兼论其用途及它赋予伏羲所使用的古老图形的意义》(法语:Explication de l'arithmétique binaire, qui se sert des seuls caractères 0 et 1 avec des remarques sur son utilité et sur ce qu'elle donne le sens des anciennes figures chinoises de Fohy)出现。与二进制数相关的系统在一些更早的文化中也有出现,包括古埃及、古代中国和古印度。中国的《易经》尤其引起了莱布尼茨的联想。
计算机中的十进制小数转换二进制
计算机中的十进制小数用二进制通常是用乘二取整法来获得的。
比如0.65换算成二进制就是:
0.65 × 2 = 1.3 取1,留下0.3继续乘二取整
0.3 × 2 = 0.6 取0, 留下0.6继续乘二取整
0.6 × 2 = 1.2 取1,留下0.2继续乘二取整
0.2 × 2 = 0.4 取0, 留下0.4继续乘二取整
0.4 × 2 = 0.8 取0, 留下0.8继续乘二取整
0.8 × 2 = 1.6 取1, 留下0.6继续乘二取整
0.6 × 2 = 1.2 取1,留下0.2继续乘二取整
.......
一直循环,直到达到精度限制才停止(所以,计算机保存的小数一般会有误差,所以在编程中,要想比较两个小数是否相等,只能比较某个精度范围内是否相等。)。这时,十进制的0.65,用二进制就可以表示为:01010011。2
字在计算机领域, 对于某种特定的计算机设计而言,字是用于表示其自然的数据单位的术语。
机器字长是指CPU进行一次整数运算所能处理的二进制数据的位数(整数运算即定点整数运算)。字长在计算机结构和操作的多个方面均有体现。计算机中大多数寄存器的尺寸是一个字长。电脑处理的典型数值也可能是以字长为单位。CPU和内存之间的数据传送单位也通常是一个字长。还有而内存中用于指明一个存储位置的地址也经常是以字长为单位的。
现代计算机的字长通常为16、32、64位。其他曾经使用过的字长有:8、9、12、18、24、36、39、40、48、60位;slab是早期的另一个字长实例。某些最早期的计算机是十进制的而不是二进制的,通常拥有10位或者12位的十进制数字作为字长,还有一些早期的计算机根本就没有固定字长。
字的使用根据计算机的组织情况,字长单位可能被应用到:
整数–计算机处理的整数值通常可以有若干种不同的长度,但是其中总有一种正好是该构架的字长。如果有的话,其他的整数长度很可能是字长的倍数或分数。小尺寸的整数尺寸通常是为了提高存储效率;当它被载入处理器时,它经常被转换成字长尺寸的形式。
浮点数–计算机处理的浮点数通常是一个字长或字长的倍数。
地址–计算机处理的存储器地址必须有足够的尺寸,以便可以表示需要的数值范围,但是又不能过大。经常使用的尺寸是字,不过也可以是字的倍数或分数。
寄存器– 处理器寄存器根据它要处理的数据类型被设计成适当的尺寸,例如:整数、浮点数、地址。许多计算机构架使用“通用”寄存器,它们可以存储任何类型的数据,可以允许存储哪怕是最大的数据类型。它们的尺寸通常是其构架的字长。
存储器-处理器传送–当处理器从存储器子系统读取数据至寄存器,或者,写寄存器数据到存储器,传送的数据通常是字。在简单的存储系统中,字在数据总线上传送,它一般为一个字或半个字。在使用缓存的存储系统,在处理器和一级缓存之间传送的是一个字长,而在更低级的存储层次上传送的可能是更大的尺寸(这尺寸是字的倍数)。
编址单位–在一个给定的构架中,连续的地址值对应连续的存储器单位;该单位就是编址单位。在大部分计算机中,这个单位或者是一个字符(例如:字节)或者是一个字(少部分计算机也使用位(bit)编址单位)。如果单位是字,那么用指定长度的地址就可以访问较大数量的存储空间。另一方面,如果单位是字节,那么就可以访问单个的字符(i.e. selected during the memory operation)。
指令– 机器指令通常是字长的分数或倍数。因为指令和数据经常共享同一个存储子系统,所以自然作出这样的选择。而在哈佛架构(Harvard architecture)中,指令和数据的长度并不需要有关联。
字长的选择在设计计算机时,字长的选择是非常重要的。设计上的考虑倾向于为特定的用途(如地址)设定特定的位长。然而,出于经济的考虑,又应该仅使用一种尺寸,或者很少的几种与基本尺寸成倍数或分数(约数)关系的尺寸。这个首选的基本尺寸就成为该构架的字长。
字符的尺寸对于字长的选择也有影响。20世纪60年代中期以前,字符大部分以6位存储;这样最多允许64个字符,因此不能又大写字符。由于将字长定义成字符尺寸的倍数在处理时间和存储空间上都比较划算,所以这个时期字长也就被定义为6位(在二进制机器上)的倍数。通常的选择是36位字长,这也是适合于浮点数格式的一个长度。
随着IBM360系统的引入——该系统使用8位字符,并支持大小写字母——标准的字符(确切地说:字节)尺寸也转变成为8位。从那以后,字长也自然变成了8的倍数,16、32、64位字长被广泛使用。
GBase 8t支持的数据类型BIGINT 数据类型
BIGINT 数据类型存储从 -(263 -1) 到 263 -1,即 –9,223,372,036,854,775,807 到 9,223,372,036,854,775,807 的 8 个字节的整数值。
BIGSERIAL 数据类型
BIGSERIAL 数据类型存储 BIGINT 数据类型的顺序整数(在插入新行时由数据库服务器自动指定)。BIGSERIAL 数据类型的行为与 SERIAL 数据类型相似,但范围更大。
BLOB 数据类型
BLOB 数据类型以随机存取块(称为智能大对象空间)的形式存储任何种类的二进制数据。二进制数据通常由已保存的电子表格、程序装入模块和数字化声音模式等等组成。数据库服务器不会对 BLOB 列的内容进行解释。
BOOLEAN 数据类型
BOOLEAN 数据类型将 TRUE 或 FALSE 数据值作为单字节存储。
BYTE 数据类型
BYTE 数据类型以无差别字节流的形式存储任何种类的二进制数据。二进制数据通常由数字化的信息(如,电子表格、程序装入模块和数字化声音模式等等)组成。
CHAR(n) 数据类型
CHAR 数据类型存储任何字母、数字和符号组成的字符串。它可以根据数据库语言环境存储单字节和多字节字符。
CHARACTER(n) 数据类型
CHARACTER 数据类型是 CHAR 的同义词。
CHARACTER VARYING(m,r) 数据类型
CHARACTER VARYING 数据类型存储字母、数字和可变长度的符号组成的字符串,其中 m 是列的最大大小(以字节计),而 r 是为该列保留的最小字节数。
CLOB 数据类型
CLOB 数据类型以随机存取块(称为智能大对象空间)的形式存储任何种类的文本数据。如果此信息也是文本的(例如,PostScript™、“超文本标记语言”(HTML)、“标准图形标记语言”(SGML) 或“可扩展标记语言”(XML) 数据),那么文本数据可包括文本格式的信息。
DATE 数据类型
DATE 数据类型存储日历日期。DATE 数据类型需要四个字节。日历日期在内部存储为等于自 1899 年 12 月 31 日以来的天数的整数值。
DATETIME 数据类型
DATETIME 数据类型会存储以日历日期和一天中的时间表示的瞬间时刻。
DEC 数据类型
DEC 数据类型与 DECIMAL 同义。
DECIMAL
DECIMAL 数据类型可采用两种格式:DECIMAL (p) 浮点和 DECIMAL (p,s) 定点。
DISTINCT 数据类型
DISTINCT 类型是从源类型(称为基本类型)派生的数据类型。
DOUBLE PRECISION 数据类型
DOUBLE PRECISION 关键字是 FLOAT 关键字的同义词。
FLOAT(n)
IDSSECURITYLABEL 数据类型
IDSSECURITYLABEL 类型将安全标号存储在受基于标号的访问控制 (LBAC) 安全策略保护的表中。
INT 数据类型
INT 数据类型与 INTEGER 同义。
INT8
INT8 数据类型存储从值为范围 –9,223,372,036,854,775,807 到 9,223,372,036,854,775,807 [或 -(263-1) 到 263-1] 的整数(18 或 19 位精度)。
INTEGER 数据类型
INTEGER 数据类型对 9 或 10 位精度存储范围为 -2,147,483,647 到 2,147,483,647 的整数。
INTERVAL 数据类型
INTERVAL 数据类型存储表示时间范围的值。INTERVAL 类型分为两类:year-month 时间间隔和 day-time 时间间隔。
LIST(e) 数据类型
LIST 数据类型是可存储相同 SQL 数据类型的有序非 NULL 元素的集合类型。
LVARCHAR(m) 数据类型
使用 LVARCHAR 数据类型来创建用于存储可变长度字符串(其上限 (m) 最多可为 32,739 个字节)的列。
MONEY(p,s) 数据类型
MONEY 数据类型存储货币金额。
MULTISET(e) 数据类型
MULTISET 数据类型是存储无序集的集合类型,它能包含重复的元素值。
命名 ROW
NCHAR(n) 数据类型
NCHAR 数据类型存储固定长度字符数据。该数据可以是单字节或多字节字母、数字和受数据库语言环境的代码集支持的其他符号组成的字符串。
NUMERIC(p,s) 数据类型
NUMERIC 数据类型与定点 DECIMAL 同义。
NVARCHAR(m,r) 数据类型
NVARCHAR 数据类型存储可变长度字符串。字符串可以包括数字、符号以及单字节和(在某些语言环境中)多字节字符。
OPAQUE 数据类型
OPAQUE 类型是必须为其向数据库服务器提供信息的数据类型。
REAL 数据类型
REAL 数据类型与 SMALLFLOAT 同义。
ROW 数据类型,已命名
命名的 ROW 数据类型必须使用名称进行声明。此 SQL 标识在同一个数据库内的数据类型名称中必须唯一。
ROW 数据类型,未命名
未命名 ROW 类型包含字段,但没有任何用户声明的名称。未命名 ROW 类型通过其结构来定义。
SERIAL(n) 数据类型
SERIAL 数据类型存储 INT 数据类型的顺序整数(在插入新行时由数据库服务器自动指定)。
SERIAL8(n) 数据类型
SERIAL8 数据类型存储 INT8 数据类型的顺序整数(在插入新行时由数据库服务器自动指定)。
SET(e) 数据类型
SET 数据类型是存储唯一元素的无序集合类型
SMALLFLOAT
SMALLFLOAT 数据类型会存储具有大约九个有效数字的单精度浮点数。
SMALLINT 数据类型
SMALLINT 数据类型存储范围在 –32,767 到 32,767 的小整数。最大负数 –32,768 是保留值,不能使用。
TEXT 数据类型
TEXT 数据类型存储所有类型的文本数据。它可以同时包含语言环境支持的单字节字符和多字节字符。术语简单大对象指的是 TEXT 和 BYTE 数据类型。
未命名 ROW
VARCHAR(m,r) 数据类型
VARCHAR 数据类型存储包含单字节和(如果语言环境支持)多字节字符的可变长度字符串,其中 m 是列的最大大小(以字节计),r 是为该列保留的最小字节数。3