- ベストアンサー
C言語について教えてください。
2進数のA=11111111とB=00000000をビットインタリーブして、1010101010101010としたいのですが(Aを奇数ビット、Bを偶数ビット)、C言語ではどのようにしたらよいでしょうか? また、このようなビットインタリーブしてくれる関数もありましたらよろしくお願いします。
- みんなの回答 (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)
多分動くと思います。 #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)
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)
確認していませんが #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); }