해결된 질문
작성
·
400
0
안녕하세요 선생님!
선생님 덕분에 재미있게 C를 공부하고 있습니다. 감사합니다.
다름이 아니고 비트연산자로 뺄셈을 구현할 때 약간 이해가 안 가는 점이 있어 질문을 드립니다.
int a = 9, b = 6;
printf("%d\n", a + (~b + 1));
// 1001 + 1010 = 10011 ....???
return 0;
10진수 9에서 10진수 6을 빼는 연산에서
6을 2진수로 치환한 후 부정을 걸어 1의 보수로 만들고 1을 더하면 1010이 되는 것으로 알고 있습니다.
여기에 10진수 9를 2진수로 치환한 1001을 더하면 10011이 됩니다.
그럼 답이 19가 되어야 하지 않을까 생각이 듭니다.
자리올림을 소거하면 0011로 3이 맞지만
그걸 따로 코딩을 안해준 상태에서는 19가 나와야하지 않나요?
혹시 C에서 자리올림을 알아서 소거해주는 걸까요? 아니면 제가 계산을 잘 못하고 있는 걸까요?
답변 주시면 너무 감사하겠습니다!
답변 2
2
저 대신 답도 달아주셨네요. 고맙습니다. :)