掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.26078

ビットフィールドについて
投稿者---勉強中(2006/02/12 00:52:34)


今、C言語の勉強をしているものです。
ビットフィールドとファイル出力について教えてください。
上位4ビットと下位4ビットを設定し、ファイル出力します。
出力されたファイルをバイナリエディタで内容を確認すると
上位4ビットと下位4ビットが逆になっています。
そういうものなのでしょうか?
基本的な事なのかも知れませんがよろしくお願いいたします。

参考までにプログラムを載せておきます。

#include <stdio.h>

struct {
unsigned code1: 4;
unsigned code2: 4;
}wk;

FILE *fp;
unsigned int ret;

int main() {
wk.code1 = 1;
wk.code2 = 2;

fp=fopen("test","wb");
if(fp==NULL)
{
return -1;
}

ret=fwrite(&(wk),sizeof(char),1,fp);

fclose(fp);
return 0;
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ビットフィールドについて 26079 勉強中 2006/02/12 00:58:05
<子記事> Re:ビットフィールドについて 26082 nop 2006/02/12 01:36:45
<子記事> Re:ビットフィールドについて 26087 si 2006/02/12 11:41:10


No.26079

Re:ビットフィールドについて
投稿者---勉強中(2006/02/12 00:58:05)


説明の追加です。
出力されたファイルの内容は
Ox12にならず0x21となってしまいます。
よろしくお願いいます。


この投稿にコメントする

削除パスワード

No.26082

Re:ビットフィールドについて
投稿者---nop(2006/02/12 01:36:45)


>上位4ビットと下位4ビットを設定し、ファイル出力します。
>出力されたファイルをバイナリエディタで内容を確認すると
>上位4ビットと下位4ビットが逆になっています。
>そういうものなのでしょうか?

ビットフィールドの定義で、
最初に書いたフィールドが上位になるか下位になるか、
は環境に依存します。


この投稿にコメントする

削除パスワード

No.26083

Re:ビットフィールドについて
投稿者---TJ(2006/02/12 02:46:24)
http://home.f01.itscom.net/toge/programingreport/


環境がビッグエンディアンかリトルエンディアンかで違ってきますよ。


この投稿にコメントする

削除パスワード

No.26085

Re:ビットフィールドについて
投稿者---勉強中(2006/02/12 07:57:24)


>環境がビッグエンディアンかリトルエンディアンかで違ってきますよ。

返信ありがとうございます。

ビッグエンディアン、リトルエンディアンはバイト単位ではなく
8ビット内(上位4ビットと下位4ビット)でも起こるという事
なのでしょうか?






この投稿にコメントする

削除パスワード

No.26086

失礼しました。
投稿者---TJ(2006/02/12 10:28:23)
http://home.f01.itscom.net/toge/programingreport/


>ビッグエンディアン、リトルエンディアンはバイト単位ではなく
>8ビット内(上位4ビットと下位4ビット)でも起こるという事
>なのでしょうか?
すいません。ビットフィールドは今まで使わなかったので完全に勘違いしてました。ビットフィールドはエンディアン関係ないみたいです。

安易なレスをしてしまい大変申し訳ありませんでした。
私も勉強になりました。ありがとうございます。


この投稿にコメントする

削除パスワード

No.26091

Re:ビットフィールドについて
投稿者---Hermit(2006/02/12 17:39:31)


>>環境がビッグエンディアンかリトルエンディアンかで違ってきますよ。
>
>返信ありがとうございます。
>
>ビッグエンディアン、リトルエンディアンはバイト単位ではなく
>8ビット内(上位4ビットと下位4ビット)でも起こるという事
>なのでしょうか?
>

当然逆になります。
>
>




この投稿にコメントする

削除パスワード

No.26087

Re:ビットフィールドについて
投稿者---si(2006/02/12 11:41:10)


>ビットフィールド
>struct {
> unsigned code1: 4;
> unsigned code2: 4;
>}wk;
> wk.code1 = 1;
> wk.code2 = 2;
>
この順番なら、下位ビットに 1、上位ビットに 2 が入り
結果 0x21 でいいと思うのですが?
私の理解、先に宣言ー>下位、後に宣言ー>上位


この投稿にコメントする

削除パスワード

No.26088

Re:ビットフィールドについて
投稿者---勉強中(2006/02/12 14:45:42)


>この順番なら、下位ビットに 1、上位ビットに 2 が入り
>結果 0x21 でいいと思うのですが?
>私の理解、先に宣言ー>下位、後に宣言ー>上位

そうなんですか。
私の間違った解釈だったんですね。もう一度そのあたりを勉強します。

いろいろありがとうございました。



この投稿にコメントする

削除パスワード

No.26093

Re:ビットフィールドについて
投稿者---YuO(2006/02/12 22:11:31)


>>私の理解、先に宣言ー>下位、後に宣言ー>上位
>そうなんですか。
>私の間違った解釈だったんですね。もう一度そのあたりを勉強します。

このスレッド中で,環境を特定していないあなたの質問に対して正しく答えているのはnopさんだけです。
上位から下位に詰めていくか,それともその逆であるかは,実装に依存する事項であると定められています。

以下,ISO/IEC 9899:1999 6.7.2.1 Structure and union specifiersのParagraph 10から引用。
>The order of allocation of bit-fields within a unit (high-order to
>low-order or low-order to high-order) is implementation-defined.

まずは,コンパイラのマニュアルを調べてください。
標準準拠であれば,ビットフィールドのアロケート順序に関して記述があるはずです。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧