#include<stdio.h>
//BCD : Binary-Coded Decimal
void BCD_Representation(unsigned int data,unsigned int count[])
{
unsigned int i;
unsigned int bin[32];
for(i=0;i<32;i++){
bin[i]=data%2;
data/=2;
}
count[0]=count[1]=0;
for(i=0;i<32;i++){
if(bin[31-i]==0)count[0]++; //0および1の個数を数える
if(bin[31-i]==1)count[1]++;
//count[bin[31-i]]++; //←これでも可能
printf("%d",bin[31-i]);
if(i%4==3) //4桁ずつ区切る
printf(" ");
}
}
int main(void)
{
unsigned int data1,data2,count[2];
printf("符号なし32bit整数を入力してください.\n");
scanf("%d",&data1);
printf("%d は2進表示で ",data1);
BCD_Representation(data1,count);
printf("です.\n");
printf("0のビット数は%d,1のビット数は%dです.\n",count[0],count[1]);
printf("\n");
printf("符号なし32bit整数2つを入力してください.\n");
scanf("%d%d",&data1,&data2);
printf("%d は2進表示で ",data1);
BCD_Representation(data1,count);
printf(",\n");
printf("%d は2進表示で ",data2);
BCD_Representation(data2,count);
printf("です.\n");
printf("~%d は2進表示で ",data1);
BCD_Representation(~data1,count);
printf(",\n");
printf("~%d は2進表示で ",data2);
BCD_Representation(~data2,count);
printf("です.\n");
printf("%d << 1 は2進表示で ",data1);
BCD_Representation(data1<<1,count);
printf(",\n");
printf("%d >> 1 は2進表示で ",data2);
BCD_Representation(data2>>1,count);
printf("です.\n");
printf("%d & %d は2進表示で ",data1,data2);
BCD_Representation(data1&data2,count);
printf("です.\n");
printf("%d | %d は2進表示で ",data1,data2);
BCD_Representation(data1|data2,count);
printf("です.\n");
printf("%d ^ %d は2進表示で ",data1,data2);
BCD_Representation(data1^data2,count);
printf("です.\n");
return 0;
}