음수의 비트연산
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의 보수를 취해서 절대값을 구합니다.
이제는 이해되셨나요?
'Study > Mathematics & Physics' 카테고리의 다른 글
특정 벡터에 수직인 임의의 벡터 (0) | 2015.12.02 |
---|---|
라디안(호도법)을 사용하는 이유 (0) | 2011.09.02 |
오일러의 문제점과 쿼터니온에 관한 동영상 (0) | 2009.12.09 |
1의 보수 (0) | 2009.07.17 |