프로그래밍

 3198, 1/160 회원가입  로그인  
   dokito
   3x8/4를 계산하는건데요

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3361 [복사]


>>,<<를 써서 출력하는건데
답은 6이고.. 첫번쨰는 책의 답안지이고 두번째거는 제가 푼건데요
제가 푼거는 자꾸 0이 나옵니다
#include<stdio.h>

int main(void)
{        
        int num = 3 ;

        num= num<<3 ;
        num= num>>2 ;
        
        printf("3 x 8 / 4 = %d" , num) ;
        
        return 0;
}

위는 책의 답
아래꺼는 제건데 왜 안되나요?
자꾸 0이 뜨네여

#include<stdio.h>

int main(void)
{        
        int num = 3 ;

        int num1 ;
        
        
        num1= num<<3 ;
        num1= num>>2 ;
        
        printf("3 x 8 / 4 = %d" , num1) ;
        
        return 0;
}

  Hit : 5504     Date : 2012/03/26 02:06



    
lainb 위에거는 num변수를 <<3 번 비트를 이동시키고 다시 >>2번 비트를 이동시킵니다. 즉 <<1번 한셈이고
아래 코드는 num1변수에 num변수의 값을 << 3 번 비트를 이동시킨 값을 넣고
num변수의 값을 >>2번 비트를 이동시킨 값을 다시 num1에 덮어씌었습니다 즉 그냥 num 변수에>>2번 한 결과를 num1에 준 셈이네요.

그럼 코드를 고치려면 그리고 num1변수를 굳이 쓴다면
num1 = num << 3; // 0000 0011 -> 00001 1000
num1 = num1 >>2; // 0001 1000 -> 0000 0110
로 하면 될거같네요
2012/03/26  
dbman 정답지.
정수 3을 <<3한 결과는 00011000 = 24를 num에 다시 대입
대입된 24를 다시 >>2를 한 결과 00000110 = 6

dokito님이 하신것.
정수 3을 <<3한 결과는 00011000 = 24로 동일.
여기서 24를 비트연산 하신게 아니라 num(정수 3값)을 다시 >>2 하셨음
정수 3은 00000011인데 >>2 비트연산 시켰으므로 00000000을 가지게 됨

고로 최종 출력은 0을 찍게 됩니다.
2012/03/26