偶数ビットと奇数ビットを取り出すプログラム

このQ&Aのポイント
  • Red Hat Linux 9を使用してC言語のプログラミングをしていますが、偶数ビットと奇数ビットを取り出す方法について質問です。
  • 64ビットの値があり、偶数ビットと奇数ビットをそれぞれ32ビットの値に別々に取り出したいと思っています。
  • アイディアが思い浮かばず困っていますので、分かる方がいらっしゃいましたらアドバイスをお願いします。
回答を見る
  • ベストアンサー

偶数ビットだけと奇数ビットだけを取り出すプログラム

Red Hat Linux 9を使用して、C言語のプログラミングをしているのですが、分からないことがありますので質問させて頂きます。 1010101010101010101010101010101010101010101010101010101010101010 上記のような64ビットの値があり、このうち奇数ビットだけと偶数ビットだけを取り出したいと思います。それぞれ32ビットの値になります。 11111111111111111111111111111111 00000000000000000000000000000000 いろいろ考えてみたのですが、アイディアが思い浮かばず困っております。どなたか分かる方アドバイスをよろしくお願い致します。

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

  • ベストアンサー
  • m-kur
  • ベストアンサー率50% (22/44)
回答No.1

効率は悪いと思いますが、シフト演算子を用いて強引に考えてみました。 long型のxに値が入っているものとすると、次のような形を利用することで奇数ビットだけ、もしくは偶数ビットだけを取り出せると思います。 long x = 123456; for(int i = 63; i >= 0; i=i-2){ if((x >> i) & 1){ //適当な処理 }else{ //適当な処理 } }

20centuryboy
質問者

お礼

シフト演算を利用することで解くことができました。どうもアドバイスありがとうございました。

関連するQ&A

  • 中央値は偶数?奇数?

    中央値で値を求めるときは、サンプル数は奇数にするのがいいのでしょうか? それとも、偶数でもいいのでしょうか? 調べたら、偶数の場合だと、真ん中2つの数字の平均を使用するそうですが、 そもそも、サンプル数を奇数で使うの基本なのでしょうか? もし、奇数が基本なら、サンプル数を意図的に変更するので、その答えは意図的(公平でない)にだされたものと、なってしまいます。 どうなのでしょうか?

  • if文を使わずに奇数・偶数を判断

    はじめまして。C言語解説サイトを巡ってみたのですが、if文無しの奇数偶数判断にまで辿りつかず頭を抱えています。 任意の数字を(指定回数分)打ち込み、奇数だった場合のみ加算し合計を表示するというプログラムを作成したいのですが色々と規制がかかっており、if文・switch文は使用不可/ループも1回のみとなっています。 if文を使えれば x%2 == 1 で奇数と判断できるのですが・・・。 ■ if文を使わず奇数・偶数かを判断→加算 の流れ を是非教えて頂きたいです。お時間ありましたらご教授よろしくお願い致します。

  • 奇数・偶数の区別をプログラミング

    IF文を使って奇数ならODD、偶数ならEVENと画面に表示されるようなプログラムを組もうとしたのですが、ちょっと分からなくなりました。 write(6,*)"Enter x" read(5,*)x if(???)then write(6,*)"x is ODD" else write(6,*)"x is Even" endif stop end 自分は上記のように考えてみたのですが、???に入れるべきものが分かりません。 2で割って余りが出るなら奇数というのを???に入れるんじゃないかなと思ったのですが、もしそうならどう書けばよいのか。 どなたかご教授ください。 よろしくお願いします。 ちなみに使っているプログラミング言語はFortranです。

  • Excelファイル 奇数ページだけ印刷したい

    Windows7でExcel2010を使っています プリンタはEPSON EP-803Aです Excel2010で作成した10ページのファイルを両面印刷することになりました 私のプリンタでは両面印刷できないので片面ずつ印刷しようと思いましたが 奇数ページ・偶数ページの指定の方法がわかりません 奇数ページだけ偶数ページだけという設定はできないのでしょうか そのほか何か良いアイデアがあればアドバイスよろしくお願いします

  • 計算機のプログラムの質問です

    計算機のプログラムなのですが、どうしてもわからないのでどなたか教えてください。 お願いします! 8100H番地に10進数で166の値を設定する。 その値のデータの「0」のビットの数をFDチャネルに出力する。 さらに、その値が偶数だと、FEチャネルのビットを0を、奇数ならビット1を点灯させるプログラムの作成です。 どなたかご回答の程、よろしくお願いします。

  • 関数はあるがC言語で書けないプログラム

    数学的に関数はあるがC言語では書けないプログラムを 探しています。 関数自体は偶数か奇数(0以上の整数)を返す関数で しかしプログラムでは書けないというものです。 よろしくお願いします。

  • 乱数で交互に偶数、奇数が、、、。

    C言語で、確率2分の1で0と1を 出そうとして、rand,srand,timeを使って やってみたのですが、ちょうど、0と1が 交互に出てしまいます。何度やっても 変わりません。ただ、1と0が逆になる だけ。こんな感じで0101010101か1010101010 つまり、乱数で奇数と偶数が 交互に発生しているみたいうまくいきません。 なにか、別の方法ありますか? --------------------------------------- srand((unsigned int)time(NULL)); s=rand()%2 これで、やってます。

  • 文字に色をつける

    Red Hat Linux7.3を使っているC言語の初心者ですが、色(例えば赤や緑)のついた文字(例えばnekoや1234)を表示するにはどうしたらよいのでしょうか?

  • ビット演算について

    ビット演算ができないダメグラマーです。 10101010 C言語でバイト値の3ビット目の値が0の時は1に1の時は0(ビットを反転)にするにはどのように書くのでしょうか?

  • DELLのパソコンでC言語

    学生で、現在C言語を使ってプログラミングをしています。 大学ではLinux、家庭ではDOSでプログラミングをしていますがDOSでのプログラミングに不便さを感じていることと、大学と同じ環境で勉強したいということで、デルのデスクトップPCを買おうと思っています。 しかしカタログを見ていてもデルのパソコンの違いがあまりわからず、デュアルコアなども必要なのかどうかがわかりません。 スペックとしては確実に欲しいのはこれぐらいを考えています。 HDD:80GB メモリ:256×2 ドライブ:CD&DVDRWドライブ officeはなくてかまいません。使用目的は100~1000行程度のプログラミングとインターネット、後は市販のPCゲームをやるぐらいです。 この場合メモリは512もいらないでしょうか?それとデュアルコアは必要でしょうか? 予算は8~9万程度で見ています。 それとは別の質問になるのですが、大学では今red hatを使っているのですが、red hatはいくらぐらいで入手できるのでしょうか?それとデュアルブートは簡単にできるのでしょうか? 質問が多くなってしまいましたがよろしくおねがいします。