---
# System prepended metadata

title: '用一個整數(key)表示多個整數(a,b,c...)'
tags: [math, code]

---

###### tags: `math` `code`

# 用一個整數(key)表示多個整數(a,b,c...)

## 表示兩個整數(a,b)
KeyDivisor = 1000
### 限制
b < 1000 (最大只能999)
### 轉換關係
$key = a \times 1000 + b$
a = key / 1000
b = key % 1000

## 表示N個整數(a,b,c...)
KeyDivisor = 1000
### 限制
param < 1000 (最大只能999)
### 轉換關係
$key = a \times 1000^{n-1} + b \times 1000^{n-2} ...$
a = key / $1000^{n-1}$
b = key / $1000^{n-2}$
...

## 特殊討論

1. KeyDivisor 設定成10的冪次倍數時(10/100/1000...)，在十進位制系統可以很直覺的檢視，缺點就是要操作除法與取餘運算較為費時間
2. KeyDivisor 設定成2的冪次倍數時(2/4/8/16/32...)，在二進位制系統可以很直覺的檢視，但在十進制不容易檢視，好處在可以用位元運算取代除法與取餘運算

## KeyDivisor設定為1024
KeyDivisor = 1024
KeyShifter = 10 ($2^{10} = 1024$)
### 限制
param < 1024 (最大只能1023)
### 轉換關係

原始算法|優化算法
---|---
$key = a \times 1024 + b$|$key = a << 10 + b$
a = key / 1024|a = key >> 10
b = key % 1024|b = key & (1024 - 1)

