계속 죄송합니다. 코드블럭으로 C를 독학하고 있는 잼민입니다.
음수를 만드는 법을 배우는데 비트연산자 중 부정(~)를 앞에 붙이면 음수가 된다고 배웠습니다.
제가 재대로 이해한 것인지 모르겠지만
논리부정이 아니라 비트의 부정이라면 예를 들어
0100.0000 의 비트부정은
1011.1111 이런 식으로 되는걸로 이해했습니다.
그래서 가장 크기가 작은 char를 사용해서(어차피 지난번에 char던 int던 저장은 숫자로 되고 표현만 어떻게 하느냐에 따라 숫자도 되고 문자도 되는걸 확인했습니다.)
char Ch=65;
printf("%d", ~Ch+1);
했습니다. -65가 나오더군요.
그런데 127까지는 -127 나오다가 128로 넘어가니 그냥 128이 됩니다.
게다가 128이 넘어가니 거꾸로 숫자가 줄어들더군요. 음수 부호도 붙지 않고.
저는 unsigned int와 그냥 int의 양수에서의 범위 차이가 2배인 것이 저렇게 음수 때문이라고 생각합니다만.
128이 음수변한 안 되는 것과 +1을 해주는 이유는 잘 모르겠습니다.
(IP보기클릭)14.63.***.***
(IP보기클릭)59.16.***.***
감사합니다. 위키 생각을 못했네요. 다음에는 게시판에 글 올리기전에 먼저 검색해 보겠습니다. | 21.12.07 23:23 | |
(IP보기클릭)58.141.***.***
(IP보기클릭)59.16.***.***
아, 256/2 해서 +-128이라고 생각했는데, 하나가 작군요....저거 1비트는 아마 부호겠죠? | 21.12.07 23:17 | |
(IP보기클릭)58.141.***.***
0도 한자리를 가지고 있어야 합니다. | 21.12.07 23:32 | |
(IP보기클릭)59.16.***.***
아하.....0과 NULL은 다르다는 걸...T..T | 21.12.07 23:35 | |
(IP보기클릭)121.165.***.***
(IP보기클릭)59.16.***.***
독학을 해서 그러는지 모르겠지만, 수학을 배워야 하나 생각할 때가 있습니다. 진수계산이야 어려울 게 없지만. 저거하고, 왼쪽 오른쪽으로 진수이동하는 것이 왜 2^n으로 곱하기/나누기와 같은건지 의문을 풀어야 할지. 똑똑한 사람들이 알아서 잘 해놓은거니 그냥 닭치고 외워야 하는건지... | 21.12.07 23:23 | |
(IP보기클릭)116.121.***.***
수학 배우셔야 합니다. | 21.12.08 00:01 | |
(IP보기클릭)116.121.***.***
(IP보기클릭)116.121.***.***
연산 과정은 아래와 같습니다. char Ch = 128을 하면 메모리에 1000 0000이 저장됩니다. ~Ch 연산으로 0111 1111이 됩니다. ~Ch가 char(8bit)에서 int(32bit)로 변환됩니다 메모리 상에서는 아래와 같이 표현됩니다. 00000000 00000000 00000000 01111111 이제 여기에 int형 1을 더합니다. 그러면 메모리 상에서는 아래와 같이 표현됩니다. 00000000 00000000 00000000 10000000 이 32bit는 10진수로 128로 해석됩니다. | 21.12.07 23:16 | |
(IP보기클릭)59.16.***.***
아. 이렇게 풀어쓰니 확, 보이네요. 감사합니다. 이렇게 늦은 시간에 유게나 성유게도 아니고 프로그레밍 게시판에 답변을 받을거라고는T..T | 21.12.07 23:19 | |