bitshift : decimal -> binary / 10進2進変換
ビットを扱うのって、苦手な人が多い気がする.自分ふくめ。
目に見えないからわかりにくいんだよね、たぶん。しかし、ビット演算は、つかえると非常に便利だとおもう。まだ便利に使えるほどつかえないけど。
#include <stdio.h> void dec2bin(const int decimal_orig, char *binary, const size_t strsize) { int s = 0, decimal, b_size = 0; char tmp[strsize]; decimal = decimal_orig; while (s < strsize - 1) { tmp[s++] = (decimal & 1) ? '1' : '0'; decimal = decimal >> 1; } while (s-- > 0) { if (tmp[s] == '0'&& b_size == 0) { continue; } binary[b_size++] = tmp[s]; } if (b_size == 0) { binary[b_size++] = '0'; } binary[b_size] = '\0'; } int main() { int i = -31, count = 1; char b[33], c[33], tmp[33]; for (; i < 33; i++) { dec2bin(i, b, 33); printf("%10d = %33s\n", i, b); } return 0; }
-31 = 11111111111111111111111111100001 -30 = 11111111111111111111111111100010 -29 = 11111111111111111111111111100011 -28 = 11111111111111111111111111100100 -27 = 11111111111111111111111111100101 -26 = 11111111111111111111111111100110 -25 = 11111111111111111111111111100111 -24 = 11111111111111111111111111101000 -23 = 11111111111111111111111111101001 -22 = 11111111111111111111111111101010 -21 = 11111111111111111111111111101011 -20 = 11111111111111111111111111101100 -19 = 11111111111111111111111111101101 -18 = 11111111111111111111111111101110 -17 = 11111111111111111111111111101111 -16 = 11111111111111111111111111110000 -15 = 11111111111111111111111111110001 -14 = 11111111111111111111111111110010 -13 = 11111111111111111111111111110011 -12 = 11111111111111111111111111110100 -11 = 11111111111111111111111111110101 -10 = 11111111111111111111111111110110 -9 = 11111111111111111111111111110111 -8 = 11111111111111111111111111111000 -7 = 11111111111111111111111111111001 -6 = 11111111111111111111111111111010 -5 = 11111111111111111111111111111011 -4 = 11111111111111111111111111111100 -3 = 11111111111111111111111111111101 -2 = 11111111111111111111111111111110 -1 = 11111111111111111111111111111111 0 = 0 1 = 1 2 = 10 3 = 11 4 = 100 5 = 101 6 = 110 7 = 111 8 = 1000 9 = 1001 10 = 1010 11 = 1011 12 = 1100 13 = 1101 14 = 1110 15 = 1111 16 = 10000 17 = 10001 18 = 10010 19 = 10011 20 = 10100 21 = 10101 22 = 10110 23 = 10111 24 = 11000 25 = 11001 26 = 11010 27 = 11011 28 = 11100 29 = 11101 30 = 11110 31 = 11111 32 = 100000