| 00338 01/04/26 00:15 | [質問]16進数の足し算の方法 |
| 投稿者 : k-1 | コメントを投稿する |
![]() | k-1です。こんばんは。 これまた大変稚拙な質問で申し訳ありませんが、下記について ご教示ください。 10進による足し算はたとえば ##aaa = ##aaa + 1 とやれば1000まででも2000まででも際限なくできますが、 16進で例えば0000hからFFFFhまで足し算をしたい場合は そのように記述すれば良いのでしょうか。 現在その方法が分からないので0だったら1にする、1だったら 2にする......EだったらFにするというようなまぬけな 方法を桁毎に採っています。4桁くらいなら良いのですが それ以上になるとかなり面倒なので是非足し算による方法を 知りたいのです。色々調べたのですが分かりませんでした。 本件に関しまして何か良い解決法などありましたら、 是非その方法をご教示ください。 よろしくお願いいたします。 |
| 00339 01/04/26 01:05 | RE:00338 [質問]16進数の足し算の方法 |
| 投稿者 : 杉浦 まさき | コメントを投稿する |
![]() | k-1 さん、こんばんは。 杉浦 まさき です。 #田楽サーバのバグの件はもう少しお待ちを…m(_ _)m。 >10進による足し算はたとえば >##aaa = ##aaa + 1 >とやれば1000まででも2000まででも際限なくできますが、 >16進で例えば0000hからFFFFhまで足し算をしたい場合は >そのように記述すれば良いのでしょうか。 10 進か 16 進かは単に表示の問題ですから、 数値の足し算自体は上のと同じです。 あとは数値を 16 進数表示に変換、またはその逆の変換を するような処理を行えばよいのですが… なんか久しぶりに書いたスクリプトなんで 全然スマートじゃない&負の数の場合は結果がおかしい(^^;ですが、 以下のような感じでいけると思います。 #せめて & 演算子が欲しかった…。 ; 呼出しのサンプル call num2hex 12345 #hex = #return message #hex ; "00003039" call hex2num #hex message #return ; "12345" exit ; 数値を 8 桁の 16 進数に変換 ; バグ:負の数は扱えない num2hex: ##p = value(#1) #ret = "" ##a = 0 while (##a < 8) ##n = ##p % 16 ; ##p < 0 の場合は…?? #ret = part("0123456789ABCDEF",##n,1) + #ret ##p = ##p / 16 ; 4bit arithmetic right shift (^^; ##a = ##a + 1 endwhile return #ret ; 16 進数を数値に変換 ; バグ:負の数は扱えない hex2num: ##ret = 0 ##len = length(#1) ##a = 0 while (##a < ##len) ##ret = ##ret * 16 ; 4bit left shift #s = part(#1,##a,1) ##n = length(drop("0123456789ABCDEF",toupper(#s))) ##ret = ##ret + ##n ##a = ##a + 1 endwhile return ##ret |
| 00340 01/04/26 10:21 | RE:00339 [質問]16進数の足し算の方法 |
| 投稿者 : k-1 | コメントを投稿する |
![]() | >10 進か 16 進かは単に表示の問題ですから、 >数値の足し算自体は上のと同じです。 > >あとは数値を 16 進数表示に変換、またはその逆の変換を >するような処理を行えばよいのですが… k-1です。 親切に記述までつけていただきありがとうございます。 「おぉ、なるほど!」とすぐに理解出来ないスキルの低さ が悲しい(泣)。 これを元に自分のスクリプトに当てはめてみたいと思います。 どうもありがとうございました。 |
| 新規に投稿する |