- 863 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 13:30:54 ]
- >>862
#include <stdio.h> /* 静的アサーション */ void SASSERT_(int(*p)[1]) { } #define SASSERT(b) SASSERT_((int(*)[(b) ? 1 : -1])0) /* 2進1バイトリテラル */ #define BYTE2(x) \ (SASSERT(1 < sizeof (#x) && sizeof (#x) <= 9), /* 1〜8 文字に制限 */ \ SASSERT((0x##x & ~0x11111111) == 0), /* 余計なビットがあるとエラー */ \ (0x##x >> 0) & 0x01 | \ (0x##x >> 3) & 0x02 | \ (0x##x >> 6) & 0x04 | \ (0x##x >> 9) & 0x08 | \ (0x##x >> 12) & 0x10 | \ (0x##x >> 15) & 0x20 | \ (0x##x >> 18) & 0x40 | \ (0x##x >> 21) & 0x80) /* 2進2バイトリテラル */ #define WORD2(x1, x0) ((BYTE2(x1) << 8) | BYTE2(x0)) /* 2進4バイトリテラル */ #define DWORD2(x3, x2, x1, x0) ((WORD2(x3, x2) << 16) | WORD2(x1, x0)) int main() { printf("%X\n", BYTE2(01011011)); printf("%X\n", WORD2(11001011, 10000011)); printf("%X\n", DWORD2(01011011, 11001011, 10000011, 00000000)); }
|

|