「桁の取り出し」の編集履歴(バックアップ)一覧に戻る

桁の取り出し - (2014/08/25 (月) 00:12:36) のソース

・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」などで可能です。
----