共计 2386 个字符,预计需要花费 6 分钟才能阅读完成。
●很多人会有一个疑难, 一个用来示意小数的 float 为什么示意的范畴会比 long 还要大呢 ?
●这次, 咱们就来具体说一说这个事件
从长计议
●聊到这个话题, 咱们就要从计算机存储数字这个地位说起了
●计算机存储数字的形式其实就是 : 二进制
二进制是计算机中最根本的数字存储形式,所有的数字都是以 0 和 1 的二进制数示意的。计算机中的内存和处理器等硬件组件都是以二进制为根底来设计的。计算机通过将数字转换成二进制数,而后以二进制模式存储在内存中。
●进制 : 其实就是咱们数数的时候进位的办法
十进制 0 1 2 3 4 5 6
二进制 0 1 10 11 100 101 110
●也就是说, 咱们的数字包含其余内容在内, 都会转变为二进制的模式存储起来
●例子:
○一个数字是 6, 转化成二进制当前就是 110
○那么在计算机存储的时候, 其实存储的就是 110
单位
●咱们除了晓得存储形式当前, 还要晓得一个事件, 就是计算机的存储单位
●方才咱们说了, 每一个数据其实都是依照二进制的模式存储的
●在计算机的二进制存储中,每一个二进制数位称为一个位(bit), 每 8 位二进制数被称为一个字节(byte),通常示意为 8 个 0 和 1 的序列
●字节(B), 就是咱们通常计算机中的一种存储单位而已, 咱们个别的计算机都是依照字节来存储的
●例子 :
○有一个数字是 0, 二进制转换当前是 0, 那么就会占一个 位
○有一个数字是 1, 二进制转换当前是 1, 那么也是会占一个 位
○然而咱们思考一下, 存储的时候, 就是占了两个位, 可是他俩不能放在一起存储啊
○一旦放到一起, 到底是 01 还是 10 还是 一个 0 和 一个 1 呢 ?
●所以, 所有的数据存储都会依照本人来存储, 也就是 byte
●换句话说, 就是一个数字哪怕是一个位, 那么存储的时候也会占据一个字节的地位
○也就是说 : 一个数字是 1, 二进制当前是 1, 因为要占据一个字节
○会把这个 1 变成 0000 0001 这样的模式来存储
○这样就刚刚好占据了一个字节的地位
●依据下面的说法来看, 一个本人(byte) 存储的最大范畴就是
○1111 1111 也就是 255 这个数字
○然而咱们思考到还有正负数的关系, 所以一个字节外面还要有一位示意正负的位
○所以, 其实就是 -128 ~ 127 之间的取值范畴
●问题来了
○那么 -129 或者 300 这些数字怎么存储呢 ?
不同的数字类型
●既然一个字节只能存储 -128 ~ 127 范畴内的数字, 那么其余的数字怎么办呢, 不存了吗 ?
●这个时候, 咱们就要来聊一下数字的存储形式了
●以 Java 或者 C 或者 C++ 语言为例
●byte
○如果以 byte 定义一个数字, 就是通知你的电脑, 我要申请一个字节的地位存储数据
○那么电脑会调配给你一个字节来存储以后数据, 所以只能存储 -128 ~ 127 之间的数字
●short
○如果以 short 定义一个数字, 就是通知你的电脑, 我要申请两个字节的地位来存储数据
○那么电脑会调配给你两个字节来存储以后数据
○一个字节有 8 个位, 那么两个字节就是 16 个位
○换句话说, 如果以 byte 的模式存储数字 1, 那么是 0000 0001
○如果以 short 来存储一个数字 1, 那么是 0000 0000 0000 0001
○所以 short 存储数字的最大范畴就是 -32,768 到 32,767
●int
○同样的情理, int 也能够用来定义存储一个数字
○int 示意的数字会占四个字节的地位, 也就是 32 位
○取值范畴就是 -2,147,483,648 到 2,147,483,647
●long
○同样的情理
○long 示意的数字会占八个字节的地位, 也就是 64 位
○取值范畴就是 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
●你看这样就好了解的多了
long 类型
●long 这个类型很有意思
●在不同的解析器或者编译器内, long 的示意模式不一样
●下面咱们说的
○long 在 java, c, c++ 内都是示意 64 位, 也就是 8 个字节的地位
●然而
○long 在 javascript 内, 依据 js 解析器来剖析
○long 就示意 32 的数字, 也就是占 4 个字节的地位
○取值范畴就是 -2,147,483,648 到 2,147,483,647
●好了
○到当初为止, 咱们直到了 long 是怎么存储的
○接下来该到了 float 了
存储小数
●方才说完了整数, 接下来咱们就来说一说小数
●在计算机存储小数的时候有两种办法
1. 定点数表示法
●定点数表示法是指把小数点固定在某个地位上,用整数来示意小数局部的一种办法。通常应用定点数表示法的状况下,小数点的地位被固定在一个确定的地位上,比方在小数点后一位或两位。
●例如,如果将小数点固定在第一位,那么能够把小数 0.123 示意为整数 123。如果将小数点固定在第二位,那么能够把小数 0.123 示意为整数 1230。
●这不是咱们须要的, 就不纠结了
2. 浮点数表示法
●浮点数表示法其实就是浮动小数点的办法来示意一个小数
●咱们通常会分为单精度浮点数和双精度浮点数
●这个才是咱们纠结的事件, 所以要具体解释一下
●具体理解一下浮点数
1. 单精度浮点数
●单精度浮点数的存储占用 4 个字节, 也就是 32 位
●其中第一个位示意的是 符号, 也就是 正负数
●其中第二个到第九个这 8 位来做指数占位
●最初就是尾数占 23 位
●示意范畴约为 1.4E-45 到 3.4E+38,精度为大概 7 位有效数字
2. 双精度浮点数
○双精度浮点数存储占用 8 个字节, 也就是 64 位
○其中第一个位示意的是 符号
○其中第二个到第十二个这 11 位来做指数占位
○最初就是位数占 52 位
○示意范畴约为 4.9E-324 到 1.8E+308,精度为大概 15 位有效数字
论断
●事已至此, 咱们该筹备的都筹备好了
●在 JavaScript 解析器内
○long 示意的是 32 的数字, 取值范畴就是 -2,147,483,648 到 2,147,483,647
○float 示意的是 32 位浮点数, 因为有指数加成, 取值范畴就是 1.4E-45 到 3.4E+38
●所以咱们才会说, float 的取值范畴会比 long 还要大