블로그 이미지
자신의 단점을 메꾸는 것을 단(鍛)이라 하고 자신의 강점을 갈고 닦는 것을 련(鍊)이라 하여, 두가지를 합친 것을 단련이라고 부른다. 붕대마음

카테고리

전체목록 (667)
참고사이트 (8)
Goal (4)
Travel (10)
My Life (105)
Game (35)
Game Review (7)
Game Plan (0)
Books (5)
English (1)
Optimizing (12)
Study (218)
유용한 것들_etc (44)
유용한 것들_func (20)
Unity (48)
Unreal (87)
작업장 (54)
RenderMonkey (6)
정리요망 (1)
따라잡기 시리즈 (0)
링크용 (0)
Total345,595
Today85
Yesterday123

'and 연산'에 해당되는 글 1건

  1. 2009.07.27 음수의 비트연산

 

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의 보수를 취해서 절대값을 구합니다.

 

이제는 이해되셨나요?

Posted by 붕대마음

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함