プロが教えるわが家の防犯対策術!

こんにちは。
今、C言語でのプログラミングについて勉強しているのですが、
その際の課題で、「32bit値を入力するとビットスワップされた結果とバイトスワップされた結果が
表示されるプログラムを作成して下さい(入力及び表示は16進数)」といったものが出されました。
で、その際のビットスワップとバイトスワップの意味がわからず、困っています。

どんな結果が出力されたら良いのか、ご教授いただけませんでしょうか?
どうかよろしくお願いいたします。

A 回答 (6件)

スワップ(swap);交換する



対象が2箇所なら互いに入れ替える、つまり交換するだけなんですが、
3箇所以上の場合はどこをどう入れ替えるのか、「スワップ」だけでは明確に言えてません。
その場合はやはり「左右の並びを逆に入れ替える」のが妥当だと思います。
あと、「ビット」「バイト」は「何ビット単位を一かたまりに扱うか」という事です。
言わずもがな、バイトなら8bit単位です。

元データが32ビットで、例えば
0x1234_5678 = 0001_0010_0011_0100_0101_0110_0111_1000
だとしたら、

ビットスワップ後は
0x1E6A_2C48 = 0001_1110_0110_1010_0010_1100_0100_1000
で、

バイトスワップ後は
0x7856_3412 = 0111_1000_0101_0110_0011_0100_0001_0010
になる事を期待してると思います。
    • good
    • 0
この回答へのお礼

課題作成者に確認したところ、ご回答いただきました通りの意図だったようです。
丁寧なご説明ありがとうございました。大変勉強になりました。

お礼日時:2012/11/23 16:28

#1です


#4殿のご指摘の通りです。
「私はバイトスワップを
1234abcd(16進)

cdab3412
と推測します」
の間違いです。
すいません。お恥ずかしい限りです。
    • good
    • 0

他の回答者も書かれていますがスワップは通常2つのものを交換することなので例えば変数a,bが a=1, b=99 だったものを a=99, b=1 にするような事です。


なのでバイトスワップといった場合は2バイト値(1バイト8ビットとすると16ビット値)の1バイト目と2バイト目を交換といったことが多いです。

なので課題を出された方本人に聞かないことには、課題を出された方の意図するバイトスワップ、ビットスワップの意味はわからないと思います。
    • good
    • 0

No.1さん>


>バイトスワップは
>12ab(16進)
>を
>ba21にすることかなと

それだと4bit単位、言うなれば「ニブルスワップ」では?
    • good
    • 1

スワップ(swap)とは「入れ替える/交換する」の意。


なので ドコとドコを交換するか が与えられない限り答えられない。

# ANo.1 では ビット順/バイト順 の逆転 と推測してはります。
    • good
    • 0

出題者の気持ちはよく分かりませんが、私は


ビットスワップは
00000000000000000000000000000010(2進)

01000000000000000000000000000000
にすること、
バイトスワップは
12ab(16進)

ba21にすることかなと推測します。あくまでも推測です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!