A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
まず2進数が10進数・16進数では4bitで処理する為4で割り切れる前処理が必要です。
長さが4で割り切れない時は0で補完します。
11→0011 の様な形です。
これを一致させて0~Fに分岐一致させます。
スイッチ文またはif文にて、
サブルーチン
if(motome eq "0000"){kotae = "0";return(kotae)}
else if(motome eq "0001"){kotae = "1";return(kotae)}
....
else if(motome eq "1111"){kotae = "F";return(kotae)}
else{err("エラー間違いです0")}
return;
これをやると16進文字が出来上がります。
説明が長くなるの殆んど省きましたがサーバーで動かすPerl/CGIでしたらホームページ
「たっちゃんのHP」の大きな数値の計算機に入っています。
書式が違うので分かりにくいかもしれませんが、zipで見てください。
参考URL:http://www2s.biglobe.ne.jp/~tatsuji/
No.4
- 回答日時:
★このカテゴリで『2進数』キーワードで検索するとたくさん出てきますよ。
・最初に『2進数』とは?
・たとえば、2 進数の『1011』はなぜ 10 進数にすると『11』になるのかを考えます。
すると『1011』が次のように
=『1×(2^3)』+『0×(2^2)』+『1×(2^1)』+『1×(2^0)』
=『1×8』+『0×4』+『1×2』+『1×1』
=『8』+『0』+『2』+『1』
=『11』←10進数です。
となっているからです。分かりますか?
・もうちょっと分かりやすく書き換えると
『1×(2^3)』+
『0×(2^2)』+
『1×(2^1)』+
『1×(2^0)』=『1011』となります。
つまり、下位ビットから順に 2 の 0乗、1乗、2乗、3乗…となります。
これをプログラムに変換するには下位ビットから順に 2 の n乗をビット単位で掛けていきます。
そして、そのかけた数をどんどん加算していきます。すると 10 進数の値が得られます。
・今回は 2 進文字列を 10 進整数に変換する方法と思いますので、左から文字列を解読して
1ビット左シフトします。その後に、0 か 1 をビット OR していけば良いでしょう。
下にそのサンプルを載せます。
サンプル:
char *string = "1011"; ←これが2進文字列
char *p; ←文字列のポインタ
int ans; ←10進整数の変数
ans = 0; ←初期化(for文の式1に記述しても良い)
for ( p = string ; *p != '\0' ; p++ ){
if ( *p == '0' ){
ans <<= 1; ←2進数なので1ビットシフト(8進数ならば3ビットシフト)
ans |= 0; ←*p が'0'だから0(特に必要ありませんが対応を取るために記述)
}
else if ( *p == '1' ){
ans <<= 1;
ans |= 1; ←*p が'1'だから1
}
else break; ←0 or 1 以外の文字(変換終了)
}
printf( "ans = %d\n", ans ); ←変換結果を表示
最後に:
・上記のサンプルは 2 進文字列を 10 進整数に変換しますが、4進、8進文字列の場合は、
シフトするビット数を 2、3ビットにします。あと 4進は'0'~'3'まで、8進では'0'~'7'の
文字の部分を増やします。
・上記は『ans <<= 1;』と『ans |= 1;』の2行に分け if-else を使っていますが、
for 文中を『ans = ((ans << 1) | (*p - '0'));』という1行でも記述できます。
・以上。おわり。→下の『参考URL』もどうぞ。
参考URL:http://oshiete.goo.ne.jp/search/search.php?statu …
No.3
- 回答日時:
#include <stdio.h>
int main(void)
{
int num, ch;
for(num = 0; (ch = getchar()) != '\n'; ) num = num * 2 + (ch == '1');
printf("%d", num);
return 0;
}
No.2
- 回答日時:
2進数をあらわす文字列(0,1の列)をStrBとします。
答えとなる10進数をintDとし、0で初期化します。
StrBの長さを測り、lbとします。
文字列を左から(たいていのプログラミング言語は処理が右からなので)一文字ずつ調べ、n番目(n = 1,2,3…)の文字のとき
その文字が1なら intD = intD + 2の(lb - n)乗
(何乗という計算のない言語ならループを回して2を(lb - n)回掛けます)
その文字が0なら、何もしない
すべての文字について処理をした後のintDが答えの10進数です。
No.1
- 回答日時:
右端を第0ビットとし左に向かってビット番号をつけます
ビット番号をnとし、ビットが立っているときそのビットの十進数は
2のn乗となります
たとえば
第一ビットと第三ビットが立っていれば
第一ビットは2の1乗=2
第三ビットは2の三乗=8
したがって
1010=2+8=10
となります
第0ビットが立っていれば
2の0乗=1
です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# numpyスライス機能を使った数値計算 2 2023/05/08 16:01
- その他(コンピューター・テクノロジー) 量子コンピュータの動作原理がわかりません。同じビットが、1でも0でも有って良いだろうか? 3 2023/02/04 03:20
- その他(プログラミング・Web制作) 変換のプログラムを教えてください。 6 2023/07/01 09:57
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Ruby VBA 2 2023/01/14 14:14
- 日用品・生活雑貨 ヘバーデン結節と電卓 1 2022/05/29 17:50
- その他(プログラミング・Web制作) 【プログラミングScratch】で音楽を演奏するプログラムを短時間でつくる方法 2 2023/07/02 07:50
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- 統計学 t分布導出時のヤコビ行列式について教えて下さい。 1 2022/07/04 21:36
- その他(プログラミング・Web制作) VBA 1 2023/01/19 16:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sscanfとscanfの違いがよくわか...
-
CStringのFindで文字列検索を行...
-
fgets関数を使用したときの文字...
-
C言語 空白の行(改行のみ)が...
-
charと%c , %s の関係について
-
1行の文字列を時間差で表示する...
-
ブランクのチェック
-
エディットボックスに入力され...
-
反転した数値を表示させるやり方
-
C言語、単語ごとに改行したい
-
C言語のステップ数をカウントす...
-
itoaわかりません
-
strstrを利用しない文字列検索...
-
小文字のみを数える方法
-
C言語 ポインタを使用した文字...
-
データ数値を16進文字列でprint...
-
16進数の文字列
-
スペースで区切って数字を入力
-
プログラミング シーザー暗号 ...
-
「an=(n-1)/(n+1)のときlim[n→∞...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
sscanfとscanfの違いがよくわか...
-
反転した数値を表示させるやり方
-
C言語のステップ数をカウントす...
-
Cで「大文字、小文字の判定」は...
-
charと%c , %s の関係について
-
ある文字列で2回目3回目に出現...
-
itoaわかりません
-
fgets関数を使用したときの文字...
-
fgetsで拾われる改行文字を削除...
-
C言語で16進数文字列から16進数...
-
CStringについて
-
文字列中に含まれる文字の個数...
-
strstrを利用しない文字列検索...
-
文の意味
-
エディットボックスに入力され...
-
文字列の途中に「0」がある場...
-
C++
-
putsとputcharの違い?
-
教えていただけませんか?C言語...
おすすめ情報