/**********************************************************************
*
* 2005-04-12
* Circular shift (right)
*
***********************************************************************/
#include <stdio.h>
void main(void)
{
int num,i=0,len,n;
unsigned int x = 0x80000000, y = 0x00000001;
// 0000 0000 0000 0000 0000 0000 0000 0001
// 1000 0000 0000 0000 0000 0000 0000 0000
// 0100 0000 0000 0000 0000 0000 0000 0000
scanf("%d%d",&num,&n);
printf("%d를 %d만큼 이동 ", num, n);
printf("\n");
// 앞으로비교 unsigned int x를참조
len = sizeof(int)*8;
while(i<len)
{
if(i>=n) 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;
}
else num >>= 1;
++i;
}
len--;
for(i=len;i>=0;i--)
printf("%d",num>>i & 1);
printf("\n");
}
*
* 2005-04-12
* Circular shift (right)
*
***********************************************************************/
#include <stdio.h>
void main(void)
{
int num,i=0,len,n;
unsigned int x = 0x80000000, y = 0x00000001;
// 0000 0000 0000 0000 0000 0000 0000 0001
// 1000 0000 0000 0000 0000 0000 0000 0000
// 0100 0000 0000 0000 0000 0000 0000 0000
scanf("%d%d",&num,&n);
printf("%d를 %d만큼 이동 ", num, n);
printf("\n");
// 앞으로비교 unsigned int x를참조
len = sizeof(int)*8;
while(i<len)
{
if(i>=n) 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;
}
else num >>= 1;
++i;
}
len--;
for(i=len;i>=0;i--)
printf("%d",num>>i & 1);
printf("\n");
}
'Native > C' 카테고리의 다른 글
reverse (0) | 2013.10.02 |
---|---|
104 (0) | 2013.10.02 |
Circular shift (left) (0) | 2013.10.02 |
char 를 float로 변경하라 (0) | 2013.10.02 |
소프트웨어 개발 순서 (0) | 2013.10.02 |