/**********************************************************************
*
* 2005-04-12
* Circular shift (left or right)
* Left 시 + Right시 -
*
***********************************************************************/
#include <stdio.h>
void main(void)
{
int num,i=0,len,n;
unsigned int x = 0x80000000;
unsigned int y = 0x00000001;
scanf("%d%d",&num,&n);
printf("%d를 %d만큼 이동 ", num, n);
printf("\n");
// 앞으로비교 unsigned int x를참조
len = sizeof(int)*8;
for(i=len-1;i>=0;i--)
printf("%d",num>>i & 1);
printf("\n");
if(n>0)
{
while(i<len)
{
if(i>=n-1) break;
if(num & x)
{
num <<= 1;
num |= y;
}
else
num <<= 1;
++i;
}
}
else
{
n *= -1; // +로 변경
while(i<len)
{
if(i>=n-1) break;
if(num & y && !(num & x)) // 0 1
{
num >>= 1;
num |= x;
}
else if(num & x && !(num & y)) // 1 0
{
num >>= 1;
// 내방식
/*num = ~num;
num |= x;
num = ~num;*/
// and 방식
num &= 0x7fffffff;
}
else num >>= 1;
++i;
}
}
len--;
for(i=len;i>=0;i--)
printf("%d",num>>i & 1);
printf("\n");
}
*
* 2005-04-12
* Circular shift (left or right)
* Left 시 + Right시 -
*
***********************************************************************/
#include <stdio.h>
void main(void)
{
int num,i=0,len,n;
unsigned int x = 0x80000000;
unsigned int y = 0x00000001;
scanf("%d%d",&num,&n);
printf("%d를 %d만큼 이동 ", num, n);
printf("\n");
// 앞으로비교 unsigned int x를참조
len = sizeof(int)*8;
for(i=len-1;i>=0;i--)
printf("%d",num>>i & 1);
printf("\n");
if(n>0)
{
while(i<len)
{
if(i>=n-1) break;
if(num & x)
{
num <<= 1;
num |= y;
}
else
num <<= 1;
++i;
}
}
else
{
n *= -1; // +로 변경
while(i<len)
{
if(i>=n-1) break;
if(num & y && !(num & x)) // 0 1
{
num >>= 1;
num |= x;
}
else if(num & x && !(num & y)) // 1 0
{
num >>= 1;
// 내방식
/*num = ~num;
num |= x;
num = ~num;*/
// and 방식
num &= 0x7fffffff;
}
else num >>= 1;
++i;
}
}
len--;
for(i=len;i>=0;i--)
printf("%d",num>>i & 1);
printf("\n");
}
'Native > C' 카테고리의 다른 글
StrMove (문자열에서 특정이후 문자를 수만큼 이동) (0) | 2013.10.02 |
---|---|
float to str (0) | 2013.10.02 |
reverse (0) | 2013.10.02 |
104 (0) | 2013.10.02 |
Circular shift (right) (0) | 2013.10.02 |