最近書くことがない | のんびりした人の日記

のんびりした人の日記

仕事の愚痴とアニメ関連のことを書いていきます。

そのぐらい暇してますww


大学も5回生決定しているし、会計士の勉強はする気もおきないのでww


やることといえば、ネットで型月の情報収集とエロゲの情報収集とプログラミングの勉強ぐらいですかね。


そんなわけで、その日作ったプログラムを載せていこうかと思います。


まだプログラミング初めて1カ月しかたってないので、いかにも素人のプログラムしか組めませんが・・・・・・


というわけで、その第一弾!ビット回転のプログラム。


/*符号なし整数xを右にnビット回転(ビット・ローテート)した値を返す関数rrotateと、左にnビット回転(ビット・ローテート)した値を返す関数lrotate*/
/*unsigned rrotate(unsigned x,int n),unsigned lrotate(unsigned x,int n)を作成*/

#include<stdio.h>

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

int int_bits()
{
return count_bits(~0U);
}

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

unsigned lrotate(unsigned x,int n)
{
unsigned a,b;
a=b=x;
a>>=n; b<<=(int_bits()-n);
x=a+b;

return x;
}

unsigned rrotate(unsigned x,int n)
{
unsigned c,d;
c=d=x;
c<<=n; d>>=(int_bits()-n);
x=c+d;

return x;
}

int main()
{
unsigned x;
int n;

printf("非負の整数を入力してください:");
scanf_s("%u",&x);
printf("左右にどれだけシフトさせますか?:");
scanf_s("%d",&n);

putchar('\n');

printf("入力された値 :");
print_bits(x);
putchar('\n');

printf("左ビット回転させた値:");
print_bits(lrotate(x,n));
putchar('\n');
printf("右ビット回転させた値:");
print_bits(rrotate(x,n));
putchar('\n');

return 0;
}