|  |
| |
| profreez |
음수를 쓸때 2의 보수를 취하는데요.
예를 들면 32비트말고 8비트로 예를 들면
00001111 = 15 잖아요.
이걸 2의 보수로 -15로 표현한다면
모든 비트를 뒤집고 거기에 +1을 해주면됩니다.
00001111 = 15
11110000 = ~ 연산
+ 1
-----------------------
11110001 = -15 |
2011/06/04 |
|
별빛을담아 |
으음... Byte사이즈를 기준으로 알려드릴게요
Byte사이즈에는 0000 0000 총 8자리에요
그렇다면 최대 숫자는 1111 1111 = 255가 되어야 겠죠
하지만 한가지 간과하고 넘어간게 있으니... 바로 첫 비트는 부호표시에 쓴다는 점입니다.
우리가 변수선언할 때 그냥 int를 쓰면 부호표시로 1비트를 쓴다는 것이고
unsigned int라는걸 선언 해야 비로소 부호비트 없이 변수를 쓸 수 있다는거죠
따라서 signed int를 쓰고 있으니까 0 000 0000으로 구분되고
0 000 0000 는 양수, 1 000 0000는 음수가 되겠죠.
기억해 두셔요. unsigned를 선언하지 않으면 1비트가 부호표시를 위해 희생됩니다.
P. S. ▶1비트◀ |
2011/06/04 |
|
| twt525 |
profreez// 아아 그런거군요~답변감사합니다 . 또 질문이있는데 만약소스를
#include <stdio.h>
int main(void)
{
int num1 =15;
int num2 =~num1;
printf("NOT연산의 결과: %d\n",num2);
return 0;
}
로 하면 -16으로 나오는데 왜 컴퓨터가 1을 더하지 않는건가요?
별빛을담아//아아 새로운사실 감사합니다~ |
2011/06/04 |
|
| profreez |
~는 모든 비트를 뒤집는 Not 연산자입니다.(이것을 1의보수라고 말을하죠)
음수로 바꾸는 연산자가 아니죠
그럼 11110000 가 양수로 얼마인지 알아보는 방법은.. 이것을 2의 보수를 취하면됩니다.
1111 0000
0000 1111 = 15 ~ 연산결과
+ 1
-------------------
0001 0000 = 16
고로 1111 0000 는 -16이라는 뜻이죠 |
2011/06/04 |
|