计算机中数据的存储(基础篇)

数据类型是学习任何语言的基础

一、数据的表示

二进制的由来

计算机有电才能工作,电子通过两种状态传递信息,高电频表示1 低电频表示0

为什么又有八进制、十六进制呢

二进制表示一个数太长啦,显示太不方便,八进制、十六进制与二进制相互转化方便

二、数据的单位

1Bit(比特)表示一位二进制

1Byte(字节) = 8Bit(比特)

1Kb(千字节) = 1024Byte

1Mb(兆字节) = 1024Kb

1Gb(吉字节) = 1024Mb

1Tb(太字节) = 1024Gb

我们平常说的你电脑内存是8G 还是16G的,就是8吉字节 16吉字节

内存中的数据的存取是以字节为单位,超级重要!!!

三、数据类型

数据类型的由来

计算机源于生活而设计,不同的数据类型可以理解为不同的单位

就像我说我口袋有100块钱,我有多少钱???

显然这是不确定的,可能是100人民币,100美元

以java中8种基本数据类型为例

  • 整数:byte、short、int、long
  • 浮点数:float、double
  • 字符:char
  • 布尔:boolean

不同的数据类型占不同的内存空间大小

  • byte  -  1字节   short    - 2字节
  • int     -  4字节   long     - 8字节
  • float  -  4字节   double - 8字节
  • char  -  1字节  boolean - 1字节(通常)  

四、数据类型的存储

数据存储在计算机里面的都是二进制补码

原码、反码、补码

正数:原码 == 反码 == 补码

负数:二进制的最高位表示符号位,其它位表数据位

补码的计算方法:

1.写出该数的原码

2.符号位不变,其他位按位取反是反码

3.反码加 1 是补码

下面所讨论的取值范围和计算都以1字节byte为例

例如:byte = -1

计算机中数据的存储(基础篇)_第1张图片 

为什么会有补码???只用反码不行嘛,那肯定不行咯

其实很简单:看几个计算的例子

需要注意的是:(很重要)

符号位也是数据,是数据就要参与运算

如果数据类型放不下该数据,发生截断

cpu只有加法寄存器所以 1 - 1 等价于 1 + (-1)

如果只用最高位区分正负,计算过程如下

计算机中数据的存储(基础篇)_第2张图片

可以,看似没什么问题

再来 =_=

计算机中数据的存储(基础篇)_第3张图片

出问题了哎!!!

-127+(-1)很好理解,因为已经超出数据范围了,超出规范了,结果也不会规范

-1+2怎么等于0呢,比原结果少1,是不是巧合?

看下面的表

计算机中数据的存储(基础篇)_第4张图片

结论:在负数参与运算时,如果跨越了0,0会被使用两次,所以结果少1 

如何解决负数计算的跨0问题 - 补码诞生

早期的程序员都是伟大的数学家,他们巧妙的进行了错位,设计出了补码

把所有负数的反码都加1,为补码,例如:-0的补码是0000 0000

所有负数的补码是由它上一个数的反码得来,看表

计算机中数据的存储(基础篇)_第5张图片

小细节1

但是,就算是有了补码

+0跟-0都是零,重复了,计算机是不会浪费这样一个存储空间的

-0要么表示-128,要么表示128,在这-0表示-128

推导过程(理解不了记结论)

计算机中数据的存储(基础篇)_第6张图片

但是1000 0000往回推是推不出来它表示十进制-128的

因为已经发生了截断,计算机看到这个二进制直接把它解释为-128

可以理解为-128没有原码和反码

还有个小细节

计算机中数据的存储(基础篇)_第7张图片

-128-1是谁呢(cpu只有加法寄存器

计算机中数据的存储(基础篇)_第8张图片

那127+1呢

计算机中数据的存储(基础篇)_第9张图片

示意图

计算机中数据的存储(基础篇)_第10张图片

五、数据的取值范围

计算机中数据的存储(基础篇)_第11张图片

如何得来,以byte为例

byte 占1个字节 8 个比特位,有符号,最高位表符号,7位表数据

一位能表示0和1 (2^1), 两位能表示0 1 2 3 (2^2)

依次类推7位能表示(2^7)个数,0也在内,正数范围就是0 - 127

负数0 - (-128)

不要忘了小细节:

-128的二进制是直接被解释的

取值范围计算公式(不需要记,理解即可)

n表示有几个比特位

无符号数:【0, 2^n-1】

有符号数:【-2^(n-1)-1, 2^(n-1)-1】

了解原反补的由来这取值范围不轻轻松松搞定

完美撒花撒花

你可能感兴趣的:(Java开发基础,java)