美文网首页
1.4数据宽度

1.4数据宽度

作者: 编程达人 | 来源:发表于2018-08-24 09:49 被阅读0次

计算机对数据的处理是有大小限制的。

本节必须掌握的知识点:

1、数据宽度

2、理解有符号数、无符号数

3、进制的符号

4、容器的种类

在计算机的世界里,保存在磁盘上的数据,无论是电影、还是音乐,还是可执行程序都是由0和1组成的,这些用磁盘保存的数据它可以是任意大小的数据吗?这些数据又是如何运算呢?

1.4.1数据宽度的定义】

数学上的数字,是没有大小限制的,我们可以使用正无穷负无穷。但是计算机由于受到硬件的制约,所以不能够随心所欲地保存数据,而是有所限制,而且计算机做运算是依靠电路的变化来实现的,所以和我们数学中计算有很大的差异。

从思维上最主要的差异是:数学计算不需要存储,我们用笔、也可以在脑中思考就能得出它的结果。而计算机做运算,首先要将这些数值存储在计算机中,用来存储这些数据的地方我们称为“内存”。当有很多数据存储在计算机中时,如何区分每一个数据呢?

例如:内存上有一组数字:

0011000000111110101010100100010010001000011110101001010101010011

你能知道上面的电路(数字)中存储了哪些数值吗?当然不能!即不知道它存储了多少数字,也不知道每个数字有多大。如果告诉你每16位为一个数据呢,你是不是就能知道上面的电路表示为哪些数值了?我们把每16位数分为一段,一共存储了4个数,它们的数值如下:

0011000000111110

1010101001000100

1000100001111010

1001010101010011

当然计算机不会依次数过去,每16位截取一下。这里想象为一个个容器,每一个容器里面装16位。

0011000000111110 1010101001000100 1000100001111010 1001010101010011

把数据存储在容器中,当计算机需要做运算时,从容器中读取数据到其他的地方就很方便了。

16位二进制能表达的无符号整数的范围是0至216-1即0~65535,假如我们需要存储一个人的年龄,最多120岁,转换为二进制为1111000(7位),16位太浪费了;假如我们要存储一个很大的数,16位不一定够用。所以我们可以根据需要去选择相关大小的容器,如何描述容器的大小呢?

容器的大小就是“数据宽度”,代表它能存储几位二进制数。

假设有一个容器的数据宽度是4位,它能存储的数据如下:

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 

1.4.2【有符号数和无符号数】

数学中的数据分为正数和负数,在计算机中我们分为无符号数和有符号数,无符号数表示全是正数,有符号数表示有正数和负数。这里好比将容器贴个标签,将它贴上“无符号数”的标签,那么它里面都是正数。如果它的标签是“有符号数”,那么它里面的数据可能是正数也是负数。它里面的电路数量是一定的,它能表示的开关组合也是一定的,那么它到底是按无符号数看还是有符号数看,关键在于它标签是什么。

例1:数据宽度为4位的容器能存储的数据转换为十六进制为“0~F”,那么它们是如何表示为有符号数、无符号数的呢?

图1-4-1:4位宽度数据存储

无符号数表示范围:0 1 2 3 4 5 6 7 8 9 A B C D E F,箭头方向表示增加方向

有符号数:

正数表示范围:0 1 2 3 4 5 6 7

负数表示范围:-1 -2 -3 -4 -5 -6 -7 -8(从半圆F起到8,所以F表示-1,8表示-8)

无符号数不难理解,而有符号数则是从中间一分为二,左边为负数,右边为正数。同一个圆把它看成无符号数它是一个正数,如果把它看成是有符号数则是有正有负。比如F,它如果是无符号数,就是15,如果是有符号数它就是-1。

例2:我们再来看一下数据宽度为8位的数据储存情况,如图1-4-2所示:

图1-4-2:8位宽度数据存储

注释:4位宽度我们用1位十六进制表示,那么8位宽度就是2位十六进制。

无符号数的储存范围:0 1 2 3 ...FF。

我们用十进制来验证一下这个结果,8位2进制(相当于8条线,每一条线有通电和不通电两种情况),那它有28个,结果为256,我们将FF转化为十进制结果也是256。

有符号数储存范围:

正数:0 1 2 ...7F

负数:80 81…FF  

我们习惯使用十进制,很多书中在讲数据的存储范围的时候也是使用10进制,我们将上述有符号数转换为10进制,结果为-128~127。所以宽度为8位能存储的数据范围为:-128~127。

在我们程序中所看到内存的数据都是十六进制的,如果遇到有符号数,大家看到高位大于等于8的数就能想到它是负数。

例3、同样我们来看一下数据宽度为16位的数据存储情况,如图1-4-3所示:

图1-4-3:16位宽度数据存储

无符号数的存储范围:0~FFFF,转换为10进制范围为:(0 ~ 216 - 1)。

有符号数存储范围(8000~7FFF)

正数:0 ~7FFF

负数:-8000 ~FFFFF(-1)  

例4、数据宽度为32位的数据存储情况,如图1-4-4所示:

图1-4-4:32位宽度数据存储

无符号数的存储范围:0~FF FF FF FF,转换为10进制范围为:(0 ~ 232 - 1)。

有符号数存储范围(80 00 00 00 ~ 7F FF FF FF)

正数:0 ~7F FF FF FF

负数:-80 00 00 00 ~ FF FF FF FF(-1)

宽度为32位是我们使用频率较多的一个容器,我们后面所学的寄存器就是32位。

总结:从计算机的角度来看,它并不区分什么是有符号数什么是无符号数,它只管存,但它最终表示的数值是我们如何定义和使用。

1.4.3【数据溢出】

所有的容器都是有界限的,一旦超出它的存储范围,它会从低位到高位存储,多余的会舍弃。

在计算机中,在对数值进行运算前要先规定其宽度,再进行运算。如果运算结果超过其宽度将被丢弃,只保留有效位。

例如:用32位宽度的容器计算无符号数FFFF FFFF+1=?因为该容器只能存储8位十六进制的数,而FFFF FFFF+1会进位变成9位十六进制数,等于1 0000 0000。这时候容器会舍掉高位,为8个0。图1-4-4中更形象地表示了这个结果:从0开始沿着箭头方向是增加的,FFFFFFFF的下个数为是0。

如果把FFFF FFFF看成有符号数,即为-1,-1+1 = 0,图1-4-4中FFFFFFFF的下个数为0。所以数据是无符号数还是有符号数关键在于我们怎么看,和计算机没有关系。

1.4.4【进制的符号】

十六进制符号用字母“0x”表示,如0xF8;二进制符号用“B”表示,如果11B。

1.4.5【容器的种类】

我们虽然可以根据数据的大小选择容器的宽度,但这并不是随意。计算机为我们提供四种单位的容器:

①字节(BYTE):数据宽度为8位;

②字(WORD):数据宽度为16位;

③双字(Doubleword,简写:DWORD):数据宽度为32位;

④ 四字(Quadword):数据宽度为64位。

图1-4-5显示了计算机常用的数值宽度,它们的高低位分布如图所示:

图1-4-5  计算机数值宽度

目前计算机中没有数据宽度为4位的容器,我们仅用它来抛砖引玉。

    u下一节介绍原码、反码、补码。

相关文章

  • 1.4数据宽度

    计算机对数据的处理是有大小限制的。 本节必须掌握的知识点: 1、数据宽度 2、理解有符号数、无符号数 3、进制的符...

  • 水平居中和垂直居中

    #水平居中 1.1.已知宽度块元素宽度 : 1.2.文本内容居中: 1.3.通过表格: 1.4.已知宽度,通过设置...

  • 进制和内存

    进制和内存 数据宽度 因为计算机受硬件制约,数据都是有长度限制的(数据宽度),超过最多宽度的数据会被丢弃 计算机中...

  • 1.4 Java 数据

    1.数据类型 a.基本数据类型:整数,小数,字符,布尔 b.引用数据类型:数组,类,接口 2.常量 a.整数类型 ...

  • 2018-07-18

    1 数据库 1.1 报纸数据 1.2 网站数据 1.3 APP数据 1.4 微博数据 1.5 微信数据 1.6 论...

  • 通过分列快速提取有效信息文本

    1.基本用法: ①分格符号:数据→分列→分隔符号→其他"/" ②固定宽度:数据→分列→固定宽度→分隔线→目标区域"...

  • 数据结构绪论

    1.基础概念和术语: 1.1 数据: 1.2 数据元素: 1.3 数据项: 1.4 数据对象: 1.5 数据结构:...

  • java基础-day27-XML

    1. XML 1.1 XML概述 1.2 基本语法 1.3 XML文件组成部分 1.4 XML文件数据约束 1.4...

  • SAS 学习

    SAS读取数据的规则是遇到空格时默认该数据读取完毕,除非是指定了数据宽度时,则以宽度值来确定数据;冒号的作用是告诉...

  • KNN算法Demo

    1, 数据集介绍: 使用系统自带的数据集。 虹膜 150个实例 萼片长度,萼片宽度,花瓣长度,花瓣宽度 (sepa...

网友评论

      本文标题:1.4数据宽度

      本文链接:https://www.haomeiwen.com/subject/fukwbftx.html