음수의 비트연산

반응형

 

int a = -15, b = -20;

int c = a & b;

 

-15를 음수로 하면 0000 1111 을

1보수 해서 1111 0000

그다음 2의보수 1111 0001 이값이 되는 건가요?

 

=> 네 맞습니다.

그런데 쓰시는 컴파일러 int가 32비트아닌가요?

그러면 11111111 11111111 11111111 11110001 이네요

 

그러하면 -20은 0001 0100 을

1보수 해서 1110 1011

그다음 2의 보수 1110 1100이렇게 되고

 

=> 역시 정확하게 하면 

11111111 11111111 11111111 11101100 이네요

 

 이걸 and연산하는거 맞는지..

    1111 0001

& 1110 1100


    1110 0000 이거 나오는게 맞는지요 그러다면

 

=> 맞습니다 32비트로 하면 다음과 같이

 

11111111 11111111 11111111 11110001

11111111 11111111 11111111 11101100

--------------------------------------------------------

11111111 11111111 11111111 11100000

 

출력 결과가 첫번째 비트가 1이니까 -이고 결과값은

-94가 답일까요? 하지만 결과값들 돌려보면 -32가 나오죠  제가 계산한게  왜 틀렷는지 알려주세요

 

=> 틀렸습니다.

 

결과 값 : 11111111 11111111 11111111 11100000

 

최상위 비트가 1이므로 음수 즉 -

값은? 다시 2의 보수를 구해야 원래 값이 나오므로

위의 것을 2의 보수를 구해보세요

 

00000000 00000000 00000000 00100000 입니다.

 

이것은 몇인가하면 32입니다.

고로 값은 -32입니다.

 

결론 2의 보수로 음수를 만드는 것은 이해하셨는데

음수 값을 10진수로 변환하는 것은 조금 틀리셨군요

최상위 비트가 1이면 음수(-) 이고

값은 다시 2의 보수를 취해서 절대값을 구합니다.

 

이제는 이해되셨나요?

TAGS.

Comments