・10進数の桁の取出し 例:「1234567」から、「34」を取り出す場合 7:1の位 6:10の位 5:100の位 4:1000の位 3:10000の位 2:100000の位 1:1000000の位 「3」は10000の位、「4」は1000の位になります。 <途中の「34」として取り出したい場合> ①「1234567」÷「1000」=「1234」:数学上は「1234567」÷「1000」=「1234」・・・「567」 SBの「÷」は切り捨てのため、「商」を計算できます。 右から3桁分を削って、右に3桁分シフトして、1000の位を1の位に下ろします。 ②「1234」余り「100」=「34」:数学上は「1234」÷「100」=「12」・・・「34」 SBの「余り」はMOD演算で、「余り」を計算できます。 右から2桁分を取り出すには、右から2桁目より左を消すため、100で割った時の余りを出します。 <途中の「3」と「4」を個別に取り出したい場合> ①「1234567」÷「1000」=「1234」:数学上は「1234567」÷「1000」=「1234」・・・「567」 右から3桁分を削って、右に3桁分シフトして、1000の位を1の位に下ろします。 ②「1234」余り「100」=「34」:数学上は「1234」÷「100」=「12」・・・「34」 右から2桁分を取り出すには、右から3桁目以左を消すため、100で割った時の余りを出します。 ③-1)「34」÷「10」=「3」:数学上は「34」÷「10」=「3」・・・「4」 右から1桁分を削って、右に1桁分シフトして、10の位を1の位に下ろします。 ③-2)「34」余り「10」=「4」:数学上は「34」÷「10」=「3」・・・「4」 右から1桁分を取り出すには、右から2桁目以左を消すため、10で割った時の余りを出します。 ---- <右から「567」として取り出したい場合> ①「1234567」余り「1000」=「567」:数学上は「1234567」÷「1000」=「1234」・・・「567」 右から3桁分を取り出すには、右から4桁目以左を消すため、1000で割った時の余りを出します。 <右から「5」「6」「7」を個別に取り出したい場合> ①「1234567」余り「10」=「7」:数学上は「1234567」÷「10」=「123456」・・・「7」 右から1桁分を取り出すには、右から2桁目以左を消すため、10で割った時の余りを出します。 ②「1234567」÷「10」=「123456」:数学上は「1234567」÷「100」=「123456」・・・「7」 右から1桁分を削って、右に1桁分シフトして、10の位を1の位に下ろします。 ③「123456」余り「10」=「6」:数学上は「123456」÷「10」=「12345」・・・「6」 右から1桁分を取り出すには、右から2桁目以左を消すため、10で割った時の余りを出します。 ④「123456」÷「10」=「12345」:数学上は「123456」÷「10」=「12345」・・・「6」 右から1桁分を削って、右に1桁分シフトして、10の位を1の位に下ろします。 ⑤「12345」余り「10」=「5」:数学上は「12345」÷「10」=「1234」・・・「5」 右から1桁分を取り出すには、右から2桁目以左を消すため、10で割った時の余りを出します。 ---- <左から「567」の「5」のみ取り出したい場合> ①「567」÷「100」=「5」:数学上は「567」÷「100」=「5」・・・「67」 先頭の右から3桁目だけを取り出すには、右に2桁分シフトして、100の位を1の位に下ろします。 <右から「567」の「7」のみ取り出したい場合> ①「567」÷「10」=「7」:数学上は「567」÷「10」=「56」・・・「7」 末尾の右から1桁目だけを取り出すには、右から2桁目以左を消すため、10で割った時の余りを出します。 ---- ・2進数の桁の取出し 例:「10110」=「EDCBA」から、「11」=「CB」を取り出す場合 0:A:2^0=1の位 1:B:2^1=2の位 1:C:2^2=4の位 0:D:2^3=8の位 1:E:2^4=16の位 <AND → 右シフト> ①「10110」AND「00110」=「00110」:「EDCBA」AND「00110」=「00CB0」 ②「00110」右シフト「1」=「0011」:「00CB0」右シフト「1」=「00CB」→CBを抜く ③-1)「0011」AND「0001」=「0001」:「00CB」AND「0001」=「000B」→Bのみ抜く ③-2)「0011」右シフト「1」=「001」:「00CB」右シフト「1」=「00C」→Cのみ抜く 最初に、抜き出したい桁を「1」にした判定用のビットとAND演算します。 続いて、抜きたい桁が右端になるまで右シフトして抜き出します。 桁を個別に抜きたい場合、AND「1」と右シフト「1」の繰り返しで、連続で可能です。 <右シフト → AND> ①「10110」右シフト「1」=「1011」:「EDCBA」右シフト「1」=「EDCB」 ②-1)「1011」AND「0011」=「0011」:「EDCB」AND「0011」=「00CB」→CBを抜く ②-2)「1011」AND「0001」=「0001」:「EDCB」AND「0001」=「000B」→Bのみ抜く ③「0011」右シフト「1」=「001」:「00CB」右シフト「1」=「00C」→Cのみ抜く 最初に、抜きたい桁が右端になるまで右シフトします。 続いて、抜き出したい桁を「1」にした判定用のビットとAND演算します。 幅のある桁を抜く場合、「1」や「11」や「111」などで可能です。 ----