10 // char * out_bit(unsigned int ina, char * bit, int bx)
11 // unsigned long in_bit(char * bit, char bx)
15 // BIT表現の文字列 "01010101" を数字として変数に入れる
16 // 1: 1,0を使ったBIT表現の文字列ポインター 2: BIT数
17 unsigned long in_bit(char * bit, char bx)
22 max = (int)strlen(bit);
25 if(bx > 8 && bx < 16){ bx = 16; }
26 if(bx > 16 && bx < 32){ bx = 32; }
27 if(bx > 32){ bx = 32; }
29 if(max < bx || max > bx){
32 printf("err not data size\n");
37 for(co = 0; co < bx; co++){
38 if(bit[co] != '1' && bit[co] != '0'){
41 printf("err not 0 or 1\n");
47 uca = (unsigned long)strtoul(bit, (char **)NULL, 2);
50 printf("<%s> %d, %d, %d, %x\n", bit, max, bx, uca, uca);
61 // 1: 表示したい変数 2: 予め32オクテット確保したポインター 3: 表示したいビット数
62 char * out_bit(unsigned int ina, char * bit, int bx)
70 memset(tib, 0x00, 34);
73 if(bx > 8 && bx < 16){ bx = 16; }
74 if(bx > 16 && bx < 32){ bx = 32; }
75 if(bx > 32){ bx = 32; }
78 tib[co++] = ina % 2 + '0';
94 for(co = (bx - 1); co >= 0; co--){
112 unsigned char ua8 = in_bit("10101010", 8);
113 unsigned short int usi16 = in_bit("1010101001010101", 16);
114 unsigned long ul32 = in_bit("00101010010101011111111100000000", 32);
116 memset(bit, 0x00, 34);
118 printf( "<%s><%02lx>\n", out_bit(ua8, bit, 8), ua8 );
119 printf( "<%s><%04lx>\n", out_bit(usi16, bit, 16), usi16 );
120 printf( "<%s><%08lx>\n", out_bit(ul32, bit, 32), ul32 );
122 memset(bit, 0x00, 34);
124 ua8 = in_bit("11111111", 8);
125 printf("-(1)-全部BITを立てた元データ-----------------------<%s><%d><0x%02lx>\n",
126 out_bit(ua8, bit, 8), ua8, ua8);
128 printf("-(2)-1の下位4BITをマスク(bit単位の論理and演算 &)---<%s><%d><0x%02lx>\n",
129 out_bit(ua8 & in_bit("11110000", 8), bit, 8), ua8 & in_bit("11110000", 8), ua8 & in_bit("11110000", 8));
131 ua8 = in_bit("00000000", 8);
132 printf("-(3)-全部BITをマスクした元データ-------------------<%s><%d><0x%02lx>\n",
133 out_bit(ua8, bit, 8), ua8, ua8);
135 printf("-(4)-3の上位4BITをON(bit単位の論理or演算 |)--------<%s><%d><0x%02lx>\n",
136 out_bit(ua8 | in_bit("11110000", 8), bit, 8), ua8 | in_bit("11110000", 8), ua8 | in_bit("11110000", 8));
138 ua8 = in_bit("01010101", 8);
139 printf("-(5)-交互にビットを立てた元データ------------------<%s><%d><0x%02lx>\n",
140 out_bit(ua8, bit, 8), ua8, ua8);
142 printf("-(6)-5の下位4BITを反転(bit単位の排他論理or演算 ^)--<%s><%d><0x%02lx>\n",
143 out_bit(ua8 ^ in_bit("00001111", 8), bit, 8), ua8 ^ in_bit("00001111", 8), ua8 ^ in_bit("00001111", 8));
145 printf("-(7)-5の全てのBITを無条件で反転(補数演算 ~)--------<%s><0x%02lx>\n",
146 out_bit(~ua8, bit, 8), ~ua8);
148 printf("-(8)-5を左に3BITシフト(左シフト演算 <<)------------<%s><0x%02lx>\n",
149 out_bit(ua8 << 3, bit, 8), ua8 << 3);
151 printf("-(9)-5を右に3BITシフト(右シフト演算 >>)------------<%s><0x%02lx>\n",
152 out_bit(ua8 >> 3, bit, 8), ua8 >> 3);
154 usi16 = in_bit("1010101010101010", 16);
155 printf("-(10)-交互にビットを立てた元データ(16Bit)----------<%s><0x%04lx>\n",
156 out_bit(usi16, bit, 16), usi16);
158 ul32 = in_bit("10101010101010110101010101010101", 32);
159 printf("-(11)-交互にビットを立てた元データ(32Bit)----------<%s><0x%08lx>\n",
160 out_bit(ul32, bit, 32), ul32);
162 printf("-(12)-11を補数で反転(32Bit補数演算)----------------<%s><0x%08lx>\n",
163 out_bit(~ul32, bit, 32), ~ul32);
165 printf("-(12)-11を左に16シフト(32Bit)----------------------<%s><0x%08lx>\n",
166 out_bit(ul32 << 16, bit, 32), ul32 << 16);
168 printf("-(12)-11を右に16シフト(32Bit)----------------------<%s><0x%08lx>\n",
169 out_bit(ul32 >> 16, bit, 32), ul32 << 16);