ビットシフト

明解C言語 入門編 > 7. 基本型 >

ビットシフト

C


#include <stdio.h>

int count_bits(unsigned x)
{
int count = 0;
while (x)
{
if (x & 1u) count++;
x >>= 1;
}
return count;
}

int int_bits(void)
{
return count_bits(~0u);
}

void print_bits(unsigned x)
{
int i;
for (i = int_bits() - 1; i >= 0; i--)
putchar(((x >> i) & 1u) ? '1' : '0');

putchar('\n');
}

int main(int argc, char* argv[])
{
unsigned na = 12345;

printf("A = "); print_bits(na);
printf("A >> 1 = "); print_bits(na >> 1);
printf("A >> 2 = "); print_bits(na >> 2);
printf("A >> 3 = "); print_bits(na >> 3);
printf("A >> 4 = "); print_bits(na >> 4);
putchar('\n');

printf("A = "); print_bits(na);
printf("A << 1 = "); print_bits(na << 1);
printf("A << 2 = "); print_bits(na << 2);
printf("A << 3 = "); print_bits(na << 3);
printf("A << 4 = "); print_bits(na << 4);

return 0;
}

実行結果

R:\>lesson057\project1.exe
A = 00000000000000000011000000111001
A >> 1 = 00000000000000000001100000011100
A >> 2 = 00000000000000000000110000001110
A >> 3 = 00000000000000000000011000000111
A >> 4 = 00000000000000000000001100000011

A = 00000000000000000011000000111001
A << 1 = 00000000000000000110000001110010
A << 2 = 00000000000000001100000011100100
A << 3 = 00000000000000011000000111001000
A << 4 = 00000000000000110000001110010000