>[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
- windows -- 环境变量
- Vscode -- 编写java
- 初始java
- java -- 关键字
- 编写第一个java程序
- java -- 注释
- 计算机存储 -- 进制
- java -- 类型
- java -- 变量
- 数字类型
- 布尔类型
- 字符类型
- 类型转换
- 双等比较是什么
- java -- 运算符
- 算数运算符
- 字符串拼接
- 关系/比较运算符
- 自增减运算符
- 逻辑运算符
- 三目运算
- 赋值运算符
- 移位运算符
- 位运算符
- 运算符优先级
- java -- 流程控制语句
- if /else if /if -- 判断
- switch case分支结构
- for -- 循环
- 用双重for循环
- while -- 循环
- do while -- 循环
- 案例练习
- java -- 数组
- 数组的存储
- 数组的增删改查
- 数组的特点
- 数组案例
- 二维数组
- 数组的工具方法
- java -- 方法
- java -- 方法的重载
- java -- 方法的调用流程
- java -- 类方法传参注意事项
- java -- 方法练习案例
- 对比 return break continue
- for each循环
- java -- 基础练习
- java -- 面向对象
- java -- 创建类和对象
- java -- 访问控制符
- java -- 类成员方法
- java -- 构造方法
- java -- this
- java -- 封装
- java -- 对象内存图
- java -- 创建对象案例
- java -- static
- java -- 继承
- super -- 关键字
- java -- 构造块和静态代码块
- java -- 重写
- java -- final
- java -- 多态
- java -- 抽象类
- java -- 接口
- 引用类型数据转换
- 综合案例
- java -- 内部类
- java -- 回调模式
- java -- 枚举类型
- java -- switch 使用枚举
- java -- 枚举方法使用
- java -- 枚举类实现接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 递归练习
- java -- 设计模式
- 单例模式
- java -- 注解
- java -- 元注解
- Java -- 核心类库
- java -- 处理字符串
- Java -- String
- String -- 常用方法
- String -- 正则
- Java -- StringBuilder 和 StringBuffer
- 知识点
- Java -- StringJoiner 字符串拼接
- 练习题
- 字符串的总结
- Java -- 包装类
- Integer
- Double
- Boolean
- Character
- java -- 集合类
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 获取当前时间戳
- Java -- 异常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法