🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[success] # 计算机存储 -- 进制 日常生活中常使用的是`十进制`数据计算方式,计算机采用的是`二进制`的计算形式,常见的进制如下 * **二进制(0b开头, binary)**:其中的数字由0、1组成 * **八进制(0o开头, Octonary)**:其中的数字由0~7组成。 * **十进制**:其中由0-9组成 * **十六进制(0x开头, hexadecimal)**:其中的数字由0~9和字母a-f组成(大小写都可以) 为了区分进制 `java7 `开始增加了新特性通过前缀区分各个进制 ~~~ 0b101 // 二进制 0b 0127 // 八进制 0 112 // 十进制 0x12ac // 十六进制 0x ~~~ * `十进制`,逢十进一,十进制权重是10^0、10^1、10^2,关于权重举个例子`1234`,表现形式`1*10^3+2*10^2+3*10^1+4*10^0`权重乘以当前位数值相加即为当前数值 ![](https://img.kancloud.cn/7f/d0/7fd0120724d8f6c5c7615068aa85fde3_575x223.png) * `二进制`,逢二进一,二进制的权重是2^0、2^1、2^2、,举个例子`1010`,根据权重计算为`1*2^3+0*2^2+1*2^1+0*2^0`其标识值为`10` 8:30 * * 二进制中的最高位(最左边)用于代表符号位,若该位是0则表示非负数,若该位是1则表示负数 * * 八进制和十六进制其实都是二进制的简写 >[info] ## 任意进制转换十进制 计算公式 `系数 * 基数的权限次幂` **相加** * **系数**:每一位上的数 * **基数**:当前进制数 * **权**:从右往左,依次为0 1 2 3 4 5 ... ***** * 二级制为例子`101`,二进制基数为 `2` 从右往左权重从 `0 - 2` 因此**基数的权限次幂**就为**2^0 2^1 2^2**乘上对应位置数值即可 ![](https://img.kancloud.cn/52/02/5202d01c7f2590c8d4fa501fce7b2f8c_1103x738.png) * 八进制`101` ![](https://img.kancloud.cn/1a/78/1a78edba55912e81f5287ba0c477be1f_1167x737.png) * 十六进制`101` ![](https://img.kancloud.cn/b0/c9/b0c95810be342704d606347675d85b81_1137x754.png) >[danger] ##### 二进制转换十进制其他方法 `8421` 快速转化法,二进制每一位的数值对应一个值,如果当前值为`1` 则获取当前值对应转换值最后相加即可 ![](https://img.kancloud.cn/36/53/3653645ed8e2ee36b2c57a692e918eae_1217x724.png) >[info] ## 十进制转换其他进制 `除基取余法`,不断除以基数(几进制,基数就是几)得到余数为,直到商为0,将余数倒着拼接即可,js编写效果如下 ~~~ function to2(num) { const ls = [] function inner(num) { let remainder = num % 2 let quotient = Math.floor(num / 2) ls.push(remainder) if (quotient) { remainder = inner(quotient) } } inner(num) return ls.reverse().join('') } console.log(to2(10)) ~~~ * 如图转换 `11` 十进制转换为 `2` 进制 ![](https://img.kancloud.cn/b4/4b/b44ba9fbf743a41559d94d8eada319a7_721x377.png) 2. 拆分法,将十进制整数拆分为若干个二进制权重的和,有该权重下面写1,否则写0,以`45` 为例 距离`45` 最近的且小于`45` 的权重为`32`(2^0,2^1,2^2,2^3,2^4,2^5,2^6 即依次为 1 2 4 8 16 32 64),`45-32 = 13` 距离`13` 最近的权重为`8`依次类推,有权重的则为`1`没权重的则为`0` ![](https://img.kancloud.cn/c4/12/c412b38f207e1b206bfc5b0854ad740b_654x176.png) >[danger] #### 负数进制之间转换 * 负十进制转换为二进制的方式,先将十进制的绝对值转换为二进制,然后进行按位取反再加1 * 负二进制转换为十进制的方式,先减1再按位取反,合并为十进制整数后添加负号 >[success] # 计算机存储 -- 单位 计算机内存的最小存储单元是字节(byte),一个字节就是一个8位二进制数,即8个bit,它的二进制表示范围从`00000000`~`11111111`,换算成十进制是0~255,换算成十六进制是`00`~`ff` 一个字节是1byte,1024字节是1K,1024K是1M,1024M是1G,1024G是1T。一个拥有4T内存的计算机的字节数量就是: ~~~ 4T = 4 x 1024G = 4 x 1024 x 1024M = 4 x 1024 x 1024 x 1024K = 4 x 1024 x 1024 x 1024 x 1024 = 4398046511104 ~~~ >[danger] ##### 关于字节储存数字解释 * 单个字节表示八位二进制位,但是作为数字表现形式,其中最高位(最左边)代表符号位,使用0代表非负数,使用1代表负数,因此数字实际一个字节的范围在`-2^7` - `2^7-1`,因为第八个字节表示正负数 * 转换过程表示 ![](https://img.kancloud.cn/19/76/1976c86cbf01ed6f266e53b22c3d1c84_1384x733.png) >[info] ## 二进制的原码、反码、补码 https://zhuanlan.zhihu.com/p/99082236