안녕하십니까?
102페이지 문제 3번 질문입니다.
public class Problem {
public static void main(String[] args) {
byte a = 15 , b = 19;
System.out.printf("%d/n", ~a) ;
위의 문제에서 a값을 비트로 표현하면 0000 1111 이고,
~a 값을 구하면 1111 0000 입니다.
여기서 2의 보수를 구해야하는데 제가하면 0000 1111 이라고 생각되는데
해답지에는 0001 0000 입니다.
2의 보수를 구하는 방법을 모르겠습니다.
안녕하세요.
2의 보수는 1의 보수를 변환한 뒤 +1을 하면 됩니다.
쉽게 구하는 방법은 오른쪽에서 왼쪽 방향으로 이동하면서 처음 1이 나올때까지 그대로 적어주고 나머지는 0은 1로, 1은 0으로 적어줍니다.
그래서 1111 0000
인 경우 오른쪽에서 왼쪽으로 가장 처음 1이 나온 네 번째 1까지는 그래도 적습니다.
1 0000
그 이후 1은 0으로 변경합니다.
0001 0000
일반적인 방법으로 변경해 보겠습니다.
1111 0000 -> 1의 보수로 변환(1은 0, 0은 1) -> 0000 1111
0000 1111 -> 2의 보수로 변환(1의 보수 +1) -> 0000 1111 + 1 -> 0001 0000
오늘도 즐거운 하루 되세요.
-
*2017-03-16 09:28:39
안녕하세요.
2의 보수는 1의 보수를 변환한 뒤 +1을 하면 됩니다.
쉽게 구하는 방법은 오른쪽에서 왼쪽 방향으로 이동하면서 처음 1이 나올때까지 그대로 적어주고 나머지는 0은 1로, 1은 0으로 적어줍니다.
그래서 1111 0000
인 경우 오른쪽에서 왼쪽으로 가장 처음 1이 나온 네 번째 1까지는 그래도 적습니다.
1 0000
그 이후 1은 0으로 변경합니다.
0001 0000
일반적인 방법으로 변경해 보겠습니다.
1111 0000 -> 1의 보수로 변환(1은 0, 0은 1) -> 0000 1111
0000 1111 -> 2의 보수로 변환(1의 보수 +1) -> 0000 1111 + 1 -> 0001 0000
오늘도 즐거운 하루 되세요.