• ベストアンサー

C言語について教えてください。

2進数のA=11111111とB=00000000をビットインタリーブして、1010101010101010としたいのですが(Aを奇数ビット、Bを偶数ビット)、C言語ではどのようにしたらよいでしょうか? また、このようなビットインタリーブしてくれる関数もありましたらよろしくお願いします。

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

  • ベストアンサー
  • keyguy
  • ベストアンサー率28% (135/469)
回答No.4

#include<iostream> using namespace std; void OutputBinary(const int& x) { for(int i=0x8000;0<i;i>>=1)cout<<(x&i)/i; cout<<endl; } void main(void) { int a,b,c; a=0xaa;b=0xf0; cout<<"a=";OutputBinary(a); cout<<"b=";OutputBinary(b); for(int i=1;i<0x10000;i<<=2)a+=a&(-i); for(int i=2;i<0x10000;i<<=2)b+=b&(-i); c=a|b; cout<<"c=";OutputBinary(c); } 結果は次の通りです。 a=0000000010101010 b=0000000011110000 c=1101110110001000

その他の回答 (3)

  • gimmick
  • ベストアンサー率49% (134/270)
回答No.3

多分動くと思います。 #include "stdio.h" #define MSB(c) (a >> 7) int main() {   unsigned char a = 0xff, b = 0x00;   unsigned long c = 0x00;      for (int i = 0; i < 8; i++) {     c = (c << 2) | (MSB(a) << 1) | MSB(b);     a <<= 1, b <<= 1;   }   printf("%x\n", c);   return 0; }

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

unsigned long A = 255; unsigned long B = 0; unsigned long C = 0; unsigned long wk = 1; int i; for (i = 0 ; i < 8 ; i++){ C = ((A << (i * 2) + 1) & (wk << 1)) | ((B << (i * 2)) & (wk)) | C; wk = (wk << 2); }

  • keyguy
  • ベストアンサー率28% (135/469)
回答No.1

確認していませんが #include<stdio> void main(void) { int a,b,c; a=0xff;b=0x00; for(int i=1;i<0x10000;i<<=2)a+=a&(-i); for(int i=2;i<0x10000;i<<=2)b+=b&(-i); c=a|b; printf("%4x\n",c); }

関連するQ&A

専門家に質問してみよう