- ベストアンサー
2進数、16進数使用例
皆さんこんにちは。 先日後輩から、「2進数とか16進数って、どんな時にプログラムで使うんですか?」 と質問を受けました。 2進数や16進数→10進数、10進数→2進数や16進数の計算方法はわかりますが、 ”いつ、どこで、どのような場合”に使うかわかりません。 今は、パソコン自体の性能も向上し、メモリ不足という心配もなくなり、 ビット計算という機会も少なくなったせいかもしれませんが、私自身 プログラミングで見たり使ったりしたことがありません。 どなたかそういう使用例をご存知の方がおられれば、サンプルソースや そういう記事が載ってるサイトを教えて頂きたいと思います。 宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
関連するQ&A
- 3進数を10進数に変換
3進数や5進数のように2の階乗ではない任意の進数の文字列を、C言語のビットシフトを使って10進数に変換するプログラムについて、質問させていただきます。 ビットシフトを使わないで、任意の進数の文字列を10進数に変換する方法は分かっていますが、ビットシフトを使った方が非常に計算が高速で出来るので、ビットシフトを使いたいと思っています。 下記のプログラムは4進文字列を10進整数に変換するものです。2進、8進文字列の場合は、シフトするビット数を1ビット、3ビット(つまり、ans <<= 1、ans <<= 3)にすれば計算することが可能です。しかし、3進数や5進数の場合、いろいろと考えたのですが、どのようにすれば良いのか分かりません。 下記のプログラムのようにビットシフトを使って3進数や5進数の文字列を10進数に変換するには、どのように工夫すれば良いでしょうか? どなたかご教授をお願いいたします。 #define STRING_NUM 2 /* 文字列の長さ */ int main(void) { int i; int ans = 0; /* 10進数の整数 */ char buf[STRING_NUM]; /* 4進数の文字列 */ buf[0] = '3'; buf[1] = '1'; for ( i = 0 ; i < STRING_NUM; i++ ){ printf(" %c", buf[i]); } printf("\n"); for ( i = 0 ; i < STRING_NUM; i++ ){ if ( buf[i] == '0' ){ ans <<= 2; /* シフトするビット数 */ ans |= 0; } if ( buf[i] == '1' ){ ans <<= 2; ans |= 1; } if ( buf[i] == '2' ){ ans <<= 2; ans |= 2; } if ( buf[i] == '3' ){ ans <<= 2; ans |= 3; } } printf( "ans = %d\n", ans ); return 0; }
- ベストアンサー
- C・C++・C#
- 質問内容のサンプルソース
こんにちは。 OKWaveにプログラミングの質問をする際に、 質問内容にサンプルソースを張り付けると、文字数制限に引っかかってしまいます。 文字数以上のサンプルソースの時みなさんどうされているんでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- メモリの周波数とFSBの関係について
メモリの周波数とFSBはどのように関係しているのでしょうか? メモリがもし仮にDDR400(=DDR-SDRAM、1秒間に4億回の命令を実行できるといういみですよね?)でデュアルチャネルだったらFSBは800より上の値ではメモリの性能を最大に発揮できないという意味では、意味ががないということですか? あと教えてgooでこのDDRの400とは >DDR400の「400」は「1秒あたり、ピン1本あたりの転送ビット数(Mビット単位)」を表しています。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1690185 とお聞きしたんですが、転送ビット数と周波数はまったく同じ意味と考えていいわけですよね?周波数は1秒間にそれだけの命令を実行できるという意味なんですから。
- 締切済み
- その他(ソフトウェア)
- C++での24bit符号付き整数値の処理
現在wavファイルからデータを読み出し、少数倍して再び格納するプログラムを作成しています。 量子化ビット数が16,32bitの場合は読み出したデータをshort型,int型の変数に入れて、そのまま計算が出来るのですが、C++には24bitの変数型がないため、24bitデータの処理に苦戦しています。 1サンプルあたり24bitで格納されているデータを読み出し、(double)倍したのち再び24bitずつ(3byte間隔で)書き込むにはどのようにすれば良いでしょうか? 一度int型に格納し、計算してから上位3byteを書き込む方法が簡単だとは思うのですが、負の値の扱いに困っています。 どなたかサンプルプログラムをお教えいただけると幸いです。
- ベストアンサー
- C・C++・C#
- このプログラム例が何を伝えようとしているのか分かりません(C言語)
下記のプログラムは『独習C 第3版』に記載されている、あるソースコードです。 #include <stdio.h> int main(void) { short i; i = 1; i = i | 32768; printf("%hd", i); return 0; } 【質問】 このプログラムの説明として、 『次のプログラムは、最上位ビットをセットすることにより、iを負数にします(ここでは、短整数が16ビットであると仮定しています)。』 とありますが、実際に実行してみると、 -32767 となり、iが負数の-1になっていません。 自分で 1000 0000 0000 0000 (32768) 0000 0000 0000 0001 (i) --------------------------- 1000 0000 0000 0001 OR として計算して、答えをWindows付属の電卓で確認したら「32769」になります。 このプログラムは何を伝えようとしているのでしょうか? どうして「-1」ではなく「-32767」のような結果になるのでしょうか? どなたか教えて頂けないでしょうか?
- ベストアンサー
- C・C++・C#
- 複数のソースからなるプログラムの実行
windowsで、Cを勉強中のプログラミング初心者です。 複雑なプログラムっていくつかの名前で、複数のソースから成っていますよね。そういうプログラムを動かしたいのですが、どうやってコンパイル、実行したら良いのですか? 以下のサイトのサンプルを、ソースコードから動かしたいと思っています。 http://www.oreilly.co.jp/books/9784873113395/download.html
- 締切済み
- C・C++・C#
- 10進数の2進数文字列変換
10進数の2進数文字列変換 ◆開発環境 OS:Linux(Ubuntu9.10) コンパイラ:gcc4.4 言語:C ◆質問内容 ポインタ*Aに格納されている10進数を2進数の文字列に変換し、 文字配列Bに格納したい。 バッファとして*fpを準備。 webで調査した結果を以下のソースのようにアレンジしましたが、 fputc関数の処理で、プログラムが強制終了してしまいます。 何か、良い方法ございませんでしょうか。 ◆サンプルソース void Dec_conv_bit(long *A,char *B){ unsigned int bit,n; //ビット比較用 unsigned int *fp = &n; n = (unsigned int)A; for(bit = 1 << sizeof(int)*8-1; bit > 0; bit >>= 1){ fputc((n & bit)?'1':'0',fp); } sprintf(B,"%s",fp); //putchar('\n'); }
- 締切済み
- C・C++・C#
- VC++2010、ADボードを用い周波数を出す方法
VC++2010、ADボードを用い周波数を出す方法を探しているんですが どこを探してもそういうサンプルプログラムがなく困っています。 デバイスをオープンとかファンクションジェネレータからアナログ波形の入力その電圧値を 取得などは出来るんですが、その周波数を出す方法が分かりません。 なにか良い方法、サンプルプログラムなどはありませんか?よろしくお願いします。 ちなみにADボードは12ビットの分解能のPCI3163で、VC++2010でファンクションジェネレータから出力されるアナログ波形のをADボードを経由してもらい、その後 周波数を出す考えでいます。 ちなみにファンクションジェネレータから出力している周波数は80kHzであります。 ではよろしくお願いします。
- ベストアンサー
- C・C++・C#
- 「情報の損失を防ぐためにプログラムを終了してくださ
win8 64bit メモリ8Gです。 ie11です。 「情報の損失を防ぐためにプログラムを終了してください 」 「コンピューターのメモリが不足しています。ファイルを保存し、これらのプログラムを終了してください。」 Evernote 「windowsは必要なメモリを復元できるだけのプログラム飲みを終了します。」 と表示されました。 タスクマネージャーを見たら Evernote (32ビット)メモリ319MB なのですが これはメモリが不足しているのでしょうか? メモリの全体のパーセンテージは64%になっています。
- ベストアンサー
- Windows 8
お礼
詳しいご回答ありがとうございます。 今後の参考にします。