2014-03-29 12 views
0

다음 C 프로그램 명령문의 출력을 이해하는 데 도움을주십시오.출력 a = ~ a + 2 << 1;

  a = ~a + 2 << 1 ; 

      printf("Value of A is %d",a); 

값은 -2가됩니다.

+5

a의 유형과 초기 값은 무엇입니까? – Davidbrcz

답변

4

나는 서명 된 int이고 2로 초기화되었다고 가정합니다.이 또한 2의 보수라고 가정합니다. (이 대답의 결과에 의미가 없으므로 첫 번째 바이트 위의 바이트도 생략했습니다.)

~ (물결표)는 비트가 아닌 연산자입니다. 즉, 1을 0으로, 0을 1로 만듭니다. < <은 왼쪽 연산으로 비트 시프트됩니다.

그래서 시작 부분에 00000010이 들어 있습니다. not 연산자를 할 때 우리는 11111101을 얻습니다. 그러면 우리는 -3을 얻을 수 있습니다.

그런 다음 2를 더하면 11111111 또는 -1이됩니다. 이 부분을 왼쪽으로 비트 시프트하면 11111110이 -2가됩니다.

+3

... 그리고 부호있는 정수가 2의 보수로 저장된다고 가정합니다. :) 어떤 오늘날의 플랫폼에서 실제로 사실입니다. –

+0

@DanielKamilKozar 예 2의 보완이 아닌 것 같아서 대답을 복잡하게 만드는 느낌이 들지 않았습니다. 헤더에 추가했습니다. – Asthor

관련 문제