>[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`權重乘以當前位數值相加即為當前數值

* `二進制`,逢二進一,二進制的權重是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**乘上對應位置數值即可

* 八進制`101`

* 十六進制`101`

>[danger] ##### 二進制轉換十進制其他方法
`8421` 快速轉化法,二進制每一位的數值對應一個值,如果當前值為`1` 則獲取當前值對應轉換值最后相加即可

>[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` 進制

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`

>[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`,因為第八個字節表示正負數
* 轉換過程表示

>[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 -- 用法