int a = 60; 을 사용하였습니다.
저는 위에 1100 0011의 최상위가1이기 때문에 2의보수를 활용하는거라고 생각했습니다. 그런데 밑에것도 1111 0000으로 최상위가 1인데 마이너스가 아니라 240이라는 결과가 나와 언제 2의보수를 활용하는것인지가 모르겠어서 다시 질문 드립니다.
int a = 60; 을 사용하였습니다.
저는 위에 1100 0011의 최상위가1이기 때문에 2의보수를 활용하는거라고 생각했습니다. 그런데 밑에것도 1111 0000으로 최상위가 1인데 마이너스가 아니라 240이라는 결과가 나와 언제 2의보수를 활용하는것인지가 모르겠어서 다시 질문 드립니다.
님은 1byte만 본거고 int는 4byte임
만약 상상한 결과를 보고싶다면 char로 선언해보셈
네 4byte기 때문에 둘다 최상위가 1이 아닌거 까지 알겠습니다. 그러면 왜 위에것은 2의 보수를 활용하는 건가요? 그냥 128+64+2+1은 왜 아닌가요?
첫번째 최상위는 1임. 2의 보수연산도 4byte 기준으로 생각해야지
첫번째는 나머지 빈칸이 전부 1이고 두번째에서는 전부 0임
네에에에????? 첫번째꺼는 왜 나머지 빈칸이 전부 1인가요???? ㄷㄷ
니가 1byte만 보고 2의보수 계산을 한다음에 4byte 로 생각하려하니까 이상하지. 16bit 다 써놓고 생각해봐라
그럼 60을 나눠서 00000000 00000000 00000000 00111100여기서 ~이것 때문에 11111111 11111111 11111111 11111111 11000011 이걸로 바꾼후 최상위가 1이니 1의 보수로 00000000 00000000 00000000 00111100이거로 바뀐후 2의보수로 바꾸기 위해 1을 더해주고 0011 1101이니 - 61이 나오는 건가요???
ㅇㅇ 그렇지
와우 머리 터질거 같네요... 결국은 ~이것 때매 2의 보수를 쓰게 되는거군여
만약 출력할때 %d 대신 %u 쓰면 2의 보수 무시하고 무조건 양수로 나옴
으으 나이먹고 할려니 힘드누...ㅠㅠ