• ベストアンサー

C言語に於けるバイナリデータ

C言語等に於けるバイナリデータは基本的に前ゼロのついた状態で電算機は記憶・処理しているのでしょうか?例えば1なら00000001のように。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

はいそうです。 32ビットコンピューターでは、 ただ 1 と書くとint型として扱われるので2進数で 0000,0000,0000,0001 という値が処理されます。 unsigned char i = 1; と書くとメモリには、2進数で 0000,0001 という値が1バイトの容量を使って記憶されますが、 i + 2; という計算をすると、2進数で、 0000,0000,0000,0001 + 0000,0000,0000,0010 という処理が行われます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

No.2です。すみません、0の数が違っていました。 正しくは、 はいそうです。 32ビットコンピューターでは、 ただ 1 と書くとint型として扱われるので2進数で 0000,0000,0000,0000,0000,0000,0000,0001 という値が処理されます。 unsigned char i = 1; と書くとメモリには、2進数で 0000,0001 という値が1バイトの容量を使って記憶されますが、 i + 2; という計算をすると、2進数で、 0000,0000,0000,0000,0000,0000,0000,0001 + 0000,0000,0000,0000,0000,0000,0000,0010 という処理が行われます

gayaldy21
質問者

お礼

ご丁寧に有難うございました。パソコンしか使わない人にはなかなか分からない部分ですね?

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.3

>32ビットコンピューターでは、 >0000,0000,0000,0001 ビット数が食い違っているため、 質問者さんが混乱を来しそうです。

gayaldy21
質問者

お礼

有難うございます。大まかなイメージを掴むことが出来ました。

全文を見る
すると、全ての回答が全文表示されます。
noname#108260
noname#108260
回答No.1

型によって固定のサイズの2進数として扱うでしょう。 当然0にあたるビットが保持されていますし、負の数なら上位は1で埋まってると思います。

gayaldy21
質問者

お礼

有難うございました。いろいろ本を読んでみます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • バイナリーで出てくるデータの変更

    計測器からバイナリーで出てくるデータを直し保存したいのですが char data1[2048] 計測器からデータを読み込み data1に入れるプログラム printf("Data read: %s\n", data1); とやると、バイナリデータのため文字化けしてしまいます。 このバイナリデータを呼び出して以下のように変更したいです。 ・11bits 4kWords 11111111111で正の最大値、 10000000000で0、 01111111111で負の最大値(一番左が符号ビット)となるバイナリデータを 01111111111で正の最大値、 00000000000で0、 11111111111で負の最大値と変更する 中心の数1024よりも大きい場合は中心の数を引き、 小さい場合には補数を取るためにー1.0を掛ければいいと思うのですが それをC言語でどのようにやればいいのかわかりません。 C言語にあまり詳しくないのですが、よろしくお願いします。

  • C言語のバイナリモードでのfscanf関数の使い方について教えて下さい

    C言語のバイナリモードでのfscanf関数の使い方について教えて下さい。 2*2のint型配列バイナリデータを読み込んで、要素一つ一つを出力したいのですが、 fscanfでの書式指定の仕方がよく分かりません。 fscanf(入力元,"???",&入力先)の???の部分はどう指定すればよいのでしょうか? 下記のようなプログラムを書いたのですが、fscanfでデータを読み込めず、 data=0という出力で無限ループに入ってしまいます。 C言語初心者なので、かなり初歩的な質問かと思いますが、 よろしくお願いします。 -------------------------------------- char *fi; int data; fi = argv[1]; /* 2x2のint型配列バイナリデータを指定 */ input = fopen(fi,"rb"); while(!feof(input)){ fscanf(input,"%d",&data); printf("data=%d\n",data); } ---------------------------------------

  • C#でバイナリデータをテキストフォームへ表示させるには?

    C#でバイナリデータをテキストフォームへ表示させるには? C#でバイナリファイルをテキストへ変換するツールを作成しています。 バイナリデータを配列へ格納し、その配列をテキスト変換してテキストフォームへ出力させるという処理を作成したいのですが、どうすれば良いのかどうしてもわかりません。 どのようなコードをどのようにして書けばよいのか、ご教示いただけないでしょうか。 よろしくお願いします。 (ちなみにC#を始めて1週間ほどです)

  • Java バイナリデータの扱い

    既出でないことを確認してみたつもりです。 <やりたいこと> 1.バイナリデータに埋め込まれたデータを読み込みたい。 2.バイナリデータの並びは例えば double d1,d2; char buffer[256]; int i1, i2; などとなっていてファイルヘッダとして同じフォーマットのファイルには全て埋め込まれています。これを読み込みたいです。 <質問> C言語であれば例えば構造体を定義してやって構造体のポインタに対して ヘッダの読み込みを行ってやれば上記のdoubleなどの変数は参照できる ようになりますが、Javaで同等の処理をやろうとするとどうすれば 良いのかわかりません。 良い方法があれば教えて下さい。宜しくお願いします。

    • ベストアンサー
    • Java
  • C言語のファイル処理

    C言語のファイル処理するにあたってランダムファイル処理を行うには,バイナリモードが適しているわけであるが,その理由を調べたいのですがいまいちよくわかりません.どなたか教えてくれませんか?

  • VBAでバイナリデータが上手く読めない。

    VBAでバイナリデータが上手く読めない。 もともとC言語でバイナリデータを加工していた事をVBAでやる事になったのですが、上手く読めない。 <VBA> Open inputFileName For Binary As #mFileNo のようにオープンして、 <VBA> Dim a(800) As Byte Get #1, , a のように記述すればC言語のように取得出来ると思ったのですが、上手く取得出来ません。 なんとなく分かった事ですが、800バイトの中に改行文字があった場合、そこまでを変数aに入れるようにすると出来そうなので、Getで改行コードがあった場合はそこまでを読み込むみたいな手段はありますでしょうか。inputだとデータがまったく見れませんでしたのでGetにて対応したいと思っています。 宜しくお願い致します。

  • C++でバイナリデータの扱い方

    以下のプログラムで接続先からバイナリデータを取得しているのですが coutで出力しても画面に何も表示されません。 ------------------------------------------------------ /*include部分は省きます*/ std::string bin; //1 clx::http session(clx::uri::encode(ip), 80); //2 session.get(clx::uri::encode(param)); //3 bin = session.body(); //4 std::cout << bin << std::endl; //5 ------------------------------------------------------ 上記プログラムを空ファイルにリダイレクトしバイナリエディタで見たら ちゃんとデータは書き込まれていました。 5行目を以下のように変えても空欄が出力されただけで文字は表示されませんでした std::cout << std::hex << bin << std::endl; しかし以下のようにすると文字数は表示されました。 std::cout << bin.length() << std::endl; やりたいこととしてはphpのpack()、unpack()的な部分です。 例えば 値をフォーマットを指定してバイナリデータとして出力 $val=pack("L", 35); とか バイナリデータを変数から指定バイト分取り出して10進数で画面に出力 $bin=(バイナリデータ); $val=unpack("c",$bin); echo(sprintf("%d",$val)); です。 バイナリの扱いはリトルエンディアンです。 ご教示お願いしますm(__)m

  • バイナリデータの操作

    Perlでバイナリデータの操作(たとえば画像のピクセル部分の変更)をする場合 配列に一つ一つ数値を入れて操作するのと スカラでデータをいっぺんにパック(?)して操作するのとでは どちらがいいのでしょうか? ようはC言語のchar配列の操作のようなことがしたいのですが。

    • ベストアンサー
    • Perl
  • Cで出力したバイナリをPythonから読みたい

    C言語でバイナリファイルに出力した配列データを、Pythonで使えるように読み込みたいです。 具体的な状況は以下の通りです。 ①以下のCプログラムを実行してdata.binを作った ``` #include <stdio.h> #include <complex.h> int main(){ int N = 256; double complex a[N]; FILE *fp; for(int i=0; i<N; i++){ /* a[N]に値を代入 */ } fp = fopen("data.bin", "rb"); fwrite(a, sizeof(a), 1, fp); fclose(fp); return 0; } ``` ②Pythonからこのdata.binファイルにアクセスして複素数の配列を得たい、が良い方法がわからない という感じになります。 現状やりかたがわからないので、一旦Cでバイナリファイルをfreadで読み込んでからfprintf等で10進数表記のテキストデータとしてファイル出力して、それをPythonから普通に文字として読み込んでから数値に変換して処理しています。 一回中間ファイルが挟まるので処理が面倒です。Pythonから直接バイナリが読めれば便利かと思い質問させていただきました。

  • pro*cでバイナリデータの扱い方

    pro*cでバイナリデータをRAW型で登録したいと思っています。 その際に、 ホスト変数をunsigned char aa[100]; insert時にutl_raw.cast_to_raw で変換して行うと、データに0x00が途中ではいると、その前データまでしかinsertできません。 何かよい方法があればご教授願います。